Orientation-based approach for forming a demosaiced image, and for color correcting and zooming the demosaiced image

ABSTRACT

A method and apparatus for forming a demosaiced image from a color-filter-array (“CFA”) image is provided. The CFA image comprises a first set of pixels colored according to a first (e.g., a green) color channel, a second set of pixels colored according to a second (e.g., a red) color channel and a third set of pixels colored according to a third (e.g., blue) color channel. The method may include obtaining an orientation map, which includes, for each pixel of the color-filter-array image, an indicator of orientation of an edge bounding such pixel. The method may further include interpolating the first color channel at the second and third sets of pixels as a function of the orientation map so as to form a fourth set of pixels. The method may also include interpolating the second color channel at the first and third sets of pixels as a function of the orientation map and the fourth set of pixels; and interpolating the third color channel at the first and second sets of pixels as a function of the orientation map and the fourth set of pixels.

BACKGROUND

1. Field

Embodiments of the present invention generally relate to demosaicing of images, and more particularly, to a method and apparatus for forming a demosaiced image from a color-filter-array (“CFA”) image, and for performing color correction and/or a digital zoom to such demosaiced image.

2. Related Art

Today's image capturing devices, such as digital cameras, camcorders, mobile phones, smart phones, Personal Digital Assistants (“PDA”) and any other like-type device, each include an imaging module that can be used to capture a number or sequence of images (each a “captured image”). To facilitate this, the imaging module includes an image sensor, which in turn, includes a array of elements or pixels (collectively “pixels”); and a color filter array (“CFA”) overlaying the array of pixels.

Typically, the CFA includes pluralities of red, green and blue (“RGB”) optical filters; one for each pixel in the array of pixels. The CFA is generally arranged in a mosaic pattern (“CFA mosaic pattern”) in which each of the RGB optical filters is not the same color as the RGB optical filters that are vertically or horizontally adjacent. The CFA-mosaic pattern may be defined, for example, so that all odd (i.e., first, third, fifth, etc.) rows of the pixels in the array are overlaid by an alternating pattern of green and red optical filters (“alternating-GR filters”), and all even (i.e., second, fourth, sixth, etc.) row of the pixels in the array are overlaid by an alternating pattern of blue and green optical filters (“alternating-BG filters”).

The array of pixels are adapted to (i) sense, through the CFA, energy corresponding to luminescence associated with a scene (i.e., the captured image), (ii) convert such energy into respective electrical charges having electrical potentials corresponding to the luminescence, and (iii) store such charges (“stored charges”). Through scaling, the image sensor makes the stored charges represent respective bytes of digital data; which have respective values proportional to the luminescence sensed by such pixels. The bytes of digital data that correspond to the entire captured image are commonly referred to as RAW and/or CFA (collectively “RAW”) data.

The image sensor typically outputs the RAW data responsive to a control signal, such as a signal to capture another image. This RAW data, as such, represents the CFA mosaic pattern. As a result, the RAW data does not represent a full color image. This is because the RAW data does not include data for all RGB planes at each of the pixels. That is, the RAW data is missing data for (i) red and blue channels at the pixels overlaid with green optical filters; (ii) red and green channels as at the pixels overlaid with blue optical filters; and (iii) and green and blue channels at pixels overlaid with red optical filters.

Legacy image-processing devices (which may be part of or completely separate from the aforementioned image capturing devices) use demosaicing to estimate missing color channels based on the RAW data. To carry out demosaicing, a legacy image-processing device typically applies, for each of the color planes, a bicubic interpolation to the RAW data. This causes the legacy image-processing device to interpolate each of the pixels using color channel information in the RAW data for pixels neighboring such pixel.

However, an image rendered from demosaicing (“demosaiced image”) usually has colors not originally present in scene captured by the image sensor (“false colors”). To reduce false colors, the legacy image-processing device may filter the already demosaiced image using one or more low-pass filters. Unfortunately, such filtering typically causes the demosaiced image to suffer from a blurring effect and other artifacts.

SUMMARY

A method and apparatus for forming a demosaiced image from a color-filter-array (“CFA”) image is provided. The CFA image comprises a first set of pixels colored according to a first (e.g., a green) color channel (“first-CFA-color-pixel set”), a second set of pixels colored according to a second (e.g., a red) color channel (“second-CFA-color-pixel set”) and a third set of pixels colored according to a third (e.g., blue) color channel (“third-CFA-color-pixel set”). The method may include obtaining an orientation map, which includes, for each pixel of the color-filter-array image, an indicator of orientation of an edge bounding such pixel. The method may further include interpolating the first color channel at the second-CFA-color-pixel and third-CFA-color-pixel sets as a function of the orientation map so as to form a fourth set of pixels (“interim-pixel set”). The method may also include interpolating the second color channel at the first-CFA-color-pixel and third-CFA-color-pixel sets as a function of the orientation map and the interim-pixel set; and interpolating the third color channel at the first-CFA-color-pixel and second-CFA-color-pixel sets as a function of the orientation map and the interim-pixel set.

The indicator of orientation may be indicative of an orientation of the edge at any of a horizontal, vertical, forty-five degree, one-hundred-thirty-five degree, and a flat orientation. And the interim-pixel set may include first, second and third subsets of pixels. The first subset of pixels may be colored according to the second color channel and an estimate of the first color channel (“first/second-color-pixel set”). The second subset of pixels may be colored according to the third color channel and an estimate of the first color channel (“first/third-color-pixel set”). The third subset of pixels is the first-CFA-color-pixel set.

Interpolating the first color channel may include, for example, obtaining, from the orientation map, for at least one first pixel of any of the second-CFA-color-pixel and third-CFA-color-pixel sets, a first indicator of orientation of an edge bounding such at least one pixel (“first orientation indicator”). Interpolating the first color channel may also include selecting, as a function of the first orientation indicator, a first filter for estimating the first color channel at the first pixel. Interpolating the first color channel may further include applying, at the first pixel, the first filter to estimate the first color channel at such first pixel. To facilitate interpolating the first color channel, the first filter may be, for example, adapted to estimate the first color channel at the first pixel as a function of a first gradient formed from at least one of the first-CFA-color-pixel set disposed in the edge bounding the first pixel. This first filter may, for example, include at least one coefficient defined as a function of the first orientation indicator.

Interpolating the second color channel may include, for example, obtaining, from the orientation map, for at least one second pixel of the first set of pixels, a second indicator of orientation of an edge bounding such second pixel (“second orientation indicator”). Interpolating the second color channel may also include selecting, as a function of the second orientation indicator, a second filter for estimating the second channel at the second pixel; and applying, at the second pixel, the second filter to estimate the second color channel at the second pixel. Interpolating the second color channel may further include (i) obtaining, from the orientation map, for at least one third pixel of the second subset of pixels, a third indicator of orientation of an edge bounding such third pixel (“third orientation indicator”); (ii) selecting, as a function of the third orientation indicator, a third filter for estimating the second color channel at the third pixel; and (iii) applying, at the third pixel, the third filter to estimate the second color channel at the third pixel.

To facilitate interpolating the second color, the second filter may be adapted to estimate the second color channel at the second pixel as a function of a second gradient. This second gradient may be formed from at least one of the first/second-color-pixel set disposed in the edge bounding the second pixel. In addition, the third filter may be adapted to estimate the second color channel at the third pixel as a function of a third gradient. This third gradient may be formed from at least one of the first/second-color-pixel set disposed in the edge bounding the third pixel.

Interpolating the third color channel may include, for example, obtaining, from the orientation map, for at least one fourth pixel of the first set of pixels, a fourth indicator of orientation of an edge bounding such second pixel (“fourth orientation indicator”). Interpolating the third color channel may also include selecting, as a function of the fourth orientation indicator, a fourth filter for estimating the third channel at the fourth pixel; and applying, at the fourth pixel, the fourth filter to estimate the third color channel at the fourth pixel. Interpolating the third color channel may further include (i) obtaining, from the orientation map, for at least one fifth pixel of the first subset of pixels, a fifth indicator of orientation of an edge bounding such fifth pixel (“fifth orientation indicator”); (ii) selecting, as a function of the fifth orientation indicator, a fifth filter for estimating the third color channel at the fifth pixel; and (iii) applying, at the fifth pixel, the fifth filter to estimate the third color channel at the fourth pixel.

To facilitate interpolating the third color, the fourth filter may be adapted to estimate the third color channel at the fourth pixel as a function of a fourth gradient. This fourth gradient may be formed from at least one of the first/third-color-pixel set disposed in the edge bounding the fourth pixel. In addition, the fifth filter may be adapted to estimate the third color channel at the fifth pixel as a function of a fifth gradient. The fifth gradient may be formed from at least one of the first/third-color-pixel set disposed in the edge bounding the fifth pixel.

BRIEF DESCRIPTION OF THE DRAWINGS

So the manner in which the above recited features are attained and can be understood in detail, a more detailed description is described below with reference to Figures illustrated in the appended drawings.

The Figures in the appended drawings, like the detailed description, are examples. As such, the Figures and the detailed description are not to be considered limiting, and other equally effective examples are possible and likely. Furthermore, like reference numerals in the Figures indicate like elements, and wherein:

FIG. 1 is a block diagram illustrating an example system for forming a demosaiced image from a color-filter-array (“CFA”) image;

FIG. 2 is a block diagram illustrating an example pictorial rendering of a CFA image;

FIG. 3 is a flow diagram illustrating an example flow for forming a demosaiced image from a CFA image;

FIG. 4 is a flow diagram illustrating an example flow for forming a demosaiced image from a CFA image;

FIG. 5 is a flow diagram illustrating an example flow for performing color correction of a demosaiced image formed from a CFA image; and

FIG. 6 is a flow diagram illustrating an example flow for performing a digital zoom of a demosaiced image formed from a CFA image.

DETAILED DESCRIPTION

In the following detailed description, numerous specific details are set forth in order to provide a thorough understanding of examples described herein. However, it will be understood that these examples may be practiced without the specific details. In other instances, well-known methods, procedures, components and circuits have not been described in detail, so as not to obscure the following description. Further, the examples disclosed are for exemplary purposes only and other examples may be employed in lieu of or in combination with of the examples disclosed.

Example Architecture

FIG. 1 is a block diagram illustrating an example system 100 for forming a demosaiced image from a color-filter-array (“CFA”) image. The system 100 may be any computing device, system and the like, and may be formed in a single unitary device and concentrated on a single server, client, peer or other type node. Alternatively, the system 100 may be formed from one or more separate devices, and as such, may be distributed among a number of server, client, peer or other type nodes. In addition, the system 100 may be scalable (i.e., may employ scale-up and/or scale-out approaches).

The system 100 may include a large number of elements; many of which are not shown for simplicity of exposition. As shown in FIG. 1, the system 100 includes an imaging device 102 and a processing platform 104, which may be communicatively coupled via link 106.

In accordance with above, the imaging device 102 may be a stand-alone device, such as a digital (still and/or video) camera. Alternatively, imaging device 102 may be included within or communicatively coupled as an accessory to any of a digital (still and/or video) camera, personal computer; portable computer, handheld computer; mobile phone, digital assistant, personal digital assistant, cellular phone, smart phone, pager, digital tablet, laptop computer, Internet appliance and the like.

The imaging device 102 is operable to capture within its field of view (“FOV”) at least one image (“imaging-device image”) of a scene at a given resolution (“imaging-device resolution”), and provide such imaging-device image to the processing platform 102 via the link 106. To facilitate capturing the imaging-device image, the imaging device 102 may include a lens 108, a shutter 109, an imaging module 110, a controller 112 and a first input/output (“I/O”) interface 114. The lens 108 may include any type of optics capable of focusing the scene for capture by the imaging module 110.

The imaging module 110 may include an image sensor 116, such as a charge-couple device and/or CMOS device. The image sensor, in turn, includes an array of pixels, and a color filter array (“CFA”) 118 overlaying such array of pixels (collectively “CFA-pixel array” 119). The CFA-pixel array 119, as shown in exploded view, includes pixels 119 _(1,1) . . . 119 _(j,k) that are arranged in j rows and k columns. The pixels 119 _(1,1) . . . 119 _(j,k) may, for example, range from a hundred to twenty million. The pixels 119 _(1,1) . . . 119 _(j,k), however, may be less than a hundred or greater than twenty million.

The number of the pixels 119 _(1,1) . . . 119 _(j,k) defines the imaging-device resolution. In practice, the imaging-device resolution is typically less than the number of pixels 119 _(1,1) . . . 119 _(j,k). This may be attributed to (i) the CFA-pixel array having one or more of the pixels 119 _(1,1) . . . 119 _(j,k) that are inoperative, malfunctioning or otherwise not in use, and/or (ii) the CFA 118 causing one or more of the pixels to be inoperative, malfunction or otherwise not be use.

The CFA 118 may include pluralities of three different colored optical filters, namely, first, second and third colored filters; one for each of the pixels 119 _(1,1) . . . 119 _(j,k). The CFA 118 may be, for example, a Bayer filter, which has a given mosaic pattern. This mosaic pattern defines that (i) the first-colored filters overlay the pixels 119 _(1,1) . . . 119 _(j,k) disposed at intersections of all odd numbered (i.e., first, third, fifth, etc.) rows and columns and at intersections of even numbered (i.e., second, fourth, sixth, etc.) rows and columns (i.e., j and k are both odd or even), (ii) the second-colored filters overlay the pixels 119 _(1,1) . . . 119 _(j,k) disposed at intersections of all odd numbered rows and all even numbered columns (i.e., j is odd and k is even), and (iii) the third-colored filters overlay the pixels 119 _(1,1) . . . 119 _(j,k) disposed at intersections of all even numbered rows and all odd numbered columns (i.e., j is even and k is odd). The mosaic pattern may take other forms as well. In addition, the CFA 118 may include more, less or different colored optical filters, such as a CYGM filter, which includes cyan, yellow, green and magenta optical filters, and/or an RGBE filter, which includes red, green, blue and emerald optical filters.

The CFA-pixel array may be adapted to (i) sense, through the CFA 118, energy corresponding to luminescence associated with the scene in the imaging-device image, (ii) convert such energy into respective electrical charges having electrical potentials corresponding to the luminescence, and (iii) store the charges (“stored charges”). The image sensor 116 or other component of the imaging module 110 (not shown) may scale the stored charges.

The image sensor 116 or other component of the imaging module 110 (not shown) may form, as a function of the stored charges for the imaging-device image (i.e., a CFA image), at least one set of RAW data. The set of RAW data represents, numerically, the CFA image at the imaging-device resolution.

The image sensor 116 or other component of the imaging module 110 (not shown) may also output the set of RAW data for transfer to the first I/O interface 114. To facilitate the transfer of the set of RAW data to the first I/O interface 114, the imaging device 102 may include a (“first internal”) link 120 communicatively coupling the imaging module 110 and the first I/O interface 114. The first internal link 120 may include one or more linkable segments. These linkable segments may be disposed in one or more wired and/or wireless communication networks and/or one or more electrical busses.

The imaging device 102 may also include two other links, namely, second and third internal links 122, 124. The second and third internal links 122, 124 communicatively couple the controller 112 to (i) the imaging module 110 and shutter 109, and (ii) the first I/O interface 114, respectively. Like the first internal link 120, the second and third internal links 122, 124 may include one or more linkable segments, which may be disposed in one or more wired and/or wireless communication networks and/or one or more electrical busses.

The controller 112 may include logic (not shown) for controlling operation of the imaging device 102. This logic may, for example, provide one or more signals (“capture signals”) via a second internal link 122 to cause the shutter 109 to open and/or close, and to cause the image sensor 116 to capture the imaging-device image. The logic may provide the capture signals at a first given frequency. The first given frequency may be periodic, cyclic and/or episodic.

The logic may also provide one or more signals (“sequencing-control signals”) to the image sensor 116 or other component of the imaging module 110, via the second internal link 122, to cause the CFA-pixel array output the set of RAW data at a second given frequency. The second given frequency may be periodic, cyclic and/or episodic, and may be the same or different from the first given frequency.

The logic may further provide one or more signals (“first-interface-control signals”) to the first I/O interface 114, via the third internal link 124, to cause the first I/O interface 114 to output to the link 106 the set of RAW data present in the first I/O interface 114. The logic may provide the first-interface-control signals at a third given frequency. The third given frequency may be periodic, cyclic and/or episodic, and may be the same or different from any of the first and second given frequencies.

To facilitate communicatively coupling the imaging device 102 and the processing platform 104, the link 106 may include one or more linkable segments. These linkable segments may be disposed in one or more wired and/or wireless communication networks and/or one or more electrical busses.

The processing platform 104 may be or be included within, for example, any of or any combination of a personal computer; a portable computer, a handheld computer; a mobile phone, a digital assistant, a personal digital assistant, a cellular phone, a smart phone, a pager, a digital tablet, a laptop computer, an Internet appliance and the like. In general, the processing platform 104 includes a processor-based platform that operates on any suitable operating system, such as Microsoft® Windows®, Apple OSX, Unix, Linux and/or Symbian; and that is capable of executing software.

The processing platform 104 may, however, include a large number of elements; many of which are not shown in FIG. 1 for simplicity of exposition. As shown in FIG. 1, the processing platform 104 may include one or more processing units (collectively “processor”) 126, memory 128, support circuits 130, bus 132, and second and third I/O interfaces 134, 136.

The processor 126 may be one or more conventional processors, microprocessors, multi-core processors and/or microcontrollers. The bus 132 provides for transmissions of digital information among the processor 126, memory 128, support circuits 130, second and third I/O interfaces 134, 136 and other portions of the processing platform 104 (not shown). The support circuits 130 facilitate operation of the processor 126, and may include well-known circuitry or circuits, including, for example, one or more I/O interfaces; one or more network interface units (“NIUs”); cache; clock circuits; power supplies and the like.

The second I/O interface 134 provides an interface to control the transmissions of digital information between components of processing platform 104 (shown and not shown) and between the processing platform 104 and the imaging device 102. To facilitate this, the second I/O interface 134 may include one or more NIUs for facilitating an exchange of information via the link 106. Accordingly, these NIUs may be adapted for communicating in accordance with one or more protocols of wired, wireless, satellite, and/or optical communications, including, for example, Ethernet and SONET protocols.

Like the second I/O interface 134, the third I/O interface 136 provides an interface to control the transmissions of digital information between components of processing platform 104 (shown and not shown). The third I/O interface 136 also provides an interface to control transmission of digital information between the processing platform 104 and other devices (not shown). To facilitate this, the third I/O interface 136 may include one or more NIUs for facilitating an exchange of information with such other devices. The NIUs may be adapted for communicating in accordance with one or more protocols of wired, wireless, satellite, and/or optical communications, including, for example, Ethernet and SONET protocols.

In addition, the third I/O interface 136 provides an interface to control the transmissions of digital information between I/O devices (not shown) associated with or otherwise attached to the processing platform 104. These I/O devices (not shown) may be embodied as any of (i) storage devices, including but not limited to, a tape drive, a floppy drive, a hard disk drive or a compact disk drive, (ii) a receiver, (ii) a transmitter, (iii) a speaker, (iv) a display, (v) a speech synthesizer, (vi) an output port, and (vii) a pointing device, such as a mouse, joystick, trackball, touchpad, pointing stick, light pen, head pointer, soap mouse, eye tracking devices, digitizing tablet and stylus, data glove that translates the user's movements to computer gestures; and a key-in device, such as a keyboard or a touchpad, (vii) and the like.

The memory 128 may be or employ any of random access memory, read-only memory, optical storage, magnetic storage, removable storage, erasable programmable read only memory and variations thereof, content addressable memory and variations thereof, flash memory, disk drive storage, removable storage and the like. The memory 128 may store and receive queries from the processor 126 to obtain various software packages to be executed by the processor 126. These software packages may include an operating system 138 and CFA-image-processing software 140.

The memory 128 may store in one or more records 142 and/or receive requests from the processor 126 to obtain, from such records 142, one or more operands, operators, dimensional values, configurations, parameters and/or other data (collectively “information”) that may be used by any of the operating system 138 and CFA-image-processing software 140 to control the operation of and/or facilitate performing the functions of the processing platform 104. The records 142 may include a data store 144. This data store 144 may include a copy of the set of RAW data (“RAW-data set”) 146, an orientation map 148, a first-interim-data set 150, a second-interim-data set 152, a third-interim-data set 154, a fourth-interim-data set 156, an interpolated-data set 158, and a zoom-data set 160 (collectively “data sets”).

The RAW-data set 146 includes a number of data points (“RAW-data points”). These RAW-data points may be arranged in any number of ways. For simplicity of exposition, the RAW-data points map to the pixels 119 _(1,1) . . . 119 _(j,k) on a one-to-one basis. For example, the RAW-data set 146 may be represented as:

$\begin{matrix} {{{RAW}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 146} = \begin{Bmatrix} a_{1,1} & \ldots & a_{1,k} \\ \vdots & \ddots & \vdots \\ a_{j,1} & \ldots & a_{j,k} \end{Bmatrix}} & (1) \end{matrix}$

where: RAW-data points a_(1,1) . . . a_(j,k) map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively.

As described in more detail below, the CFA-image-processing software 140 may use, form, populate, revise, etc. the data sets to facilitate forming the demosaiced image. Like the RAW-data set 146, the first-interim-data set 150, second-interim-data set 152, third-interim-data set 154, fourth-interim-data set 156, and interpolated-data set 158 include respective sets of data points. Each of these data points may map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively, after respective stages of interpolation carried out by the CFA-image-processing software 140.

The first-interim-data set 150, for example, may be represented as:

$\begin{matrix} {{{first}\text{-}{interim}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 150} = \begin{Bmatrix} b_{1,1} & \ldots & b_{1,k} \\ \vdots & \ddots & \vdots \\ b_{j,1} & \ldots & b_{j,k} \end{Bmatrix}} & (2) \end{matrix}$

where: the first-interim-data points b_(1,1) . . . b_(j,k), map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively, after a first stage of interpolation. The second-interim-data set 152 may be represented as:

$\begin{matrix} {{{second}\text{-}{interim}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 152} = \begin{Bmatrix} c_{1,1} & \ldots & c_{1,k} \\ \vdots & \ddots & \vdots \\ c_{j,1} & \ldots & c_{j,k} \end{Bmatrix}} & (3) \end{matrix}$

where: the second-interim-data points c_(1,1) . . . c_(j,k), map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively, after a second stage of interpolation. The third-interim-data set 154 may be represented as:

$\begin{matrix} {{{third}\text{-}{interim}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 154} = \begin{Bmatrix} d_{1,1} & \ldots & d_{1,k} \\ \vdots & \ddots & \vdots \\ d_{j,1} & \ldots & d_{j,k} \end{Bmatrix}} & (4) \end{matrix}$

where: the third-interim-data points d_(1,1) . . . d_(j,k), map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively, after a third stage of interpolation. The fourth-interim-data set 156 may be represented as:

$\begin{matrix} {{{fourth}\text{-}{interim}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 156} = \begin{Bmatrix} e_{1,1} & \ldots & e_{1,k} \\ \vdots & \ddots & \vdots \\ e_{j,1} & \ldots & e_{j,k} \end{Bmatrix}} & (5) \end{matrix}$

where: the fourth-interim-data points e_(1,1) . . . e_(j,k), map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively, after a fourth stage of interpolation. The interpolated-data set 158 may be represented as:

$\begin{matrix} {{{interpolated}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 158} = \begin{Bmatrix} f_{1,1} & \ldots & f_{1,k} \\ \vdots & \ddots & \vdots \\ f_{j,1} & \ldots & f_{j,k} \end{Bmatrix}} & (6) \end{matrix}$

where: the interpolated-data points e_(1,1) . . . e_(j,k), map to and numerically represent the pixels 119 _(1,1) . . . 119 _(j,k), respectively, after the CFA-image-processing software 140 completes the interpolation of the pixels 119 _(1,1) . . . 119 _(j,k).

As described in more detail with respect to FIG. 6, the CFA-image-processing software 140 may use the zoom-data set 160 to facilitate performing a digital zoom of the interpolated-data set 158. The zoom-data set 160 may be represented as:

$\begin{matrix} {{{zoom}\text{-}{data}\mspace{14mu}{set}\mspace{14mu} 160} = \begin{Bmatrix} z_{1,1} & \ldots & z_{1,q} \\ \vdots & \ddots & \vdots \\ z_{p,1} & \ldots & z_{p,q} \end{Bmatrix}} & (7) \end{matrix}$

where: zoom-data points z_(1,1) . . . z_(p,q), map to and numerically represent an expanded set of the pixels 119 _(1,1) . . . 119 _(p,q), respectively, after the CFA-image-processing software 140 completes a digital zoom of the pixels 119 _(1,1) . . . 119 _(j,k).

As described in more detail with respect to FIGS. 3-6, the CFA-image-processing software 140 may use the orientation map 148 to facilitate performing one or more of the various stages of the interpolation along with color correction and digital zooming. The orientation map 148 includes a number of edge indicators g_(1,1) . . . g_(j,k); one for each of the pixels 119 _(1,1) . . . 119 _(j,k). These edge indicators g_(1,1) . . . g_(j,k) may be arranged in any number of ways. For simplicity of exposition, the orientation map 148 may be represented as:

$\begin{matrix} {{{orientation}\mspace{14mu}{map}\mspace{14mu} 148} = \begin{Bmatrix} g_{1,1} & \ldots & g_{1,k} \\ \vdots & \ddots & \vdots \\ g_{j,1} & \ldots & g_{j,k} \end{Bmatrix}} & (8) \end{matrix}$

where: the edge indicators g_(1,1) . . . g_(j,k), map to the pixels 119 _(1,1) . . . 119 _(j,k), respectively.

The operating system 140 may include code for operating the processing platform 104 and for providing a platform onto which the CFA-image-processing software 140 may be executed. The CFA-image-processing software 140 may be executed by the processor 126 to control the operation of and/or facilitate performing functions for forming the demosaiced image. To do this, the CFA-image-processing software 140 may include one or more programmable and/or hard-coded functions, instructions, commands, directions, code and/or control data (collectively, “directives”). These directives, when executed by the processor 126, may interface with the memory 128 to obtain the data sets from the data store 144 for forming the demosaiced image.

As an alternative to the foregoing architecture, any of the directives of (i) the CFA-image-processing software 140, and (ii) the CFA-image-processing software 140 and/or other appropriate portion of the processing platform 104 may be implemented in any of software, firmware and/or hardware, and executed or otherwise addressed and instructed by the processor 126 to carry out such processing. To facilitate this, the directives and/or the CFA-image-processing software 140 together with the processor 126 (and or other portions of the processing platform 104) may be, for example, implemented a special-purpose computer, a field programmable gate array (“FPGA”), an application specific integrated circuit (“ASIC”), a general purpose processor (“GPP”), a system on a chip (“SoC”), and the like.

FIG. 2 is a block diagram illustrating an example pictorial rendering of a CFA image 200. The CFA image 200 includes the pixels 119 _(1,1) . . . 119 _(8,8), which may be subdivided by color into three sets of pixels, namely, first-CFA-color-pixel, second-CFA-color-pixel and third-CFA-color-pixel sets 202, 204 and 206. The first-CFA-color-pixel set 202, which includes the pixels 119 _(j,k), where j and k are both even or odd, may be colored according to a first (e.g., green) color channel of the CFA image 200. The second-CFA-color-pixel set 204, which includes the pixels 119 _(j,k), where j is odd and k is even, may be colored according to a second (e.g., red) color channel of the CFA image 200. The third-CFA-color-pixel set 206, which includes the pixels 119 _(j,k), where j is even k is odd, may be colored according to a third (e.g., blue) color channel of the CFA image 200.

In congruence with the CFA image 200, RAW-data points a_(1,1) . . . a_(8,8) may map to and numerically represent the pixels 119 _(1,1) . . . 119 _(8,8), respectively. Like the CFA image 200, the RAW-data points a_(1,1) . . . a_(8,8) may be subdivided into the three sets, namely, first-CFA-color-data, second-CFA-color-data and third-CFA-color-data sets A₁, A₂ and A₃. The first-CFA-color-data set A₁ includes the RAW-data points a_(j,k), where j and k are both even or odd. The second-CFA-color-data set A₂ includes the RAW-data points a_(j,k), where j is odd and k is even. The third-CFA-color-data set A₃ includes the RAW-data points a_(j,k), where j is even k is odd.

Although the CFA image 200, as shown, and RAW-data set 146 includes sixty-four pixels and sixty-four RAW-data points, respectfully, the CFA image 200 and the RAW-data set 146 may include more or fewer pixels and RAW-data points, respectfully. The CFA image 200 and RAW-data set 146 may include, for example, from about a few hundred to more than twenty million pixels and RAW-data points, respectfully.

Example Operation

FIG. 3 is a flow diagram illustrating an example flow 300 for forming a demosaiced image from a CFA image. For convenience, the following describes the flow 300 with reference to the system 100 of FIG. 1 and the CFA image 200 of FIG. 2. The flow 300 may be carried out by other architectures as well.

The flow 300 starts at termination block 302, and sometime thereafter, transitions to process block 304. At process block 304, the processing platform 104 obtains from the imaging device 102 the RAW-data set 146. After process block 304, the flow 300 may transition to process block 306.

At process block 306, the processing platform 104, via the CFA-image-processing software 140, forms the orientation map 148. The CFA-image-processing software 140 may use the RAW-data set 146 to form orientation map 148 so as to include the edge indicators g_(1,1) . . . g_(8,8), which map to the pixels 119 _(1,1) . . . 119 _(8,8). Each of the edge indicators g_(1,1) . . . g_(8,8) may be indicative of an orientation of an edge bounding its corresponding pixel, when such edge is well defined and/or dominates other edges bounding such pixel (collectively “well-defined edge”). Alternately, each of the edge indicators g_(1,1) . . . g_(8,8) may be indicative of may be indicative of a given construct when its corresponding pixel is not bounded by the well-defined edge.

By way of example, each edge indicator, g_(r,c) (where r=row and c=column), of the edge indicators g_(1,1) . . . g_(8,8) may be indicative of any one of (i) a horizontal orientation, h₀, (ii) a vertical orientation, h₉₀, (iii) a forty-five-degree (“45-deg”) orientation, h₄₅, (iv) a one-hundred-thirty-five-degree (“135-deg”) orientation, h₁₃₅, and (v) a flat orientation, h_(f). The edge indicator g_(r,c) may be indicative of the horizontal orientation, h₀, when the well-defined edge bounding its corresponding pixel 119 _(r,c) is oriented parallel or substantially parallel to the row in which such pixel 119 _(r,c) is disposed. Alternatively, the edge indicator g_(r,c) may be indicative of the vertical orientation, h₉₀, when the well-defined edge bounding its corresponding pixel 119 _(r,c) is oriented perpendicular or substantially perpendicular to the row in which such pixel 119 _(r,c) is disposed.

Analogously, the edge indicator g_(r,c) may be indicative of the 45-deg orientation, h₄₅, when the well-defined edge bounding its corresponding pixel 119 _(r,c) is oriented at forty-five degrees or at substantially forty-five degrees from the row in which such 119 _(r,c) is disposed. As another alternative, the edge indicator g_(r,c) may be indicative of the 135-deg orientation, h₁₃₅, when the well-defined edge bounding its corresponding pixel 119 _(r,c) is oriented at one-hundred-thirty-five degrees or at substantially one-hundred-thirty-five degrees from the row in which such 119 _(r,c) is disposed. The edge indicator g_(r,c) (may be indicative of the flat orientation, h_(f). when its corresponding pixel 119 _(r,c) is not bounded by the well-defined edge (e.g., the edge indicator g_(r,c) is not indicative of any of the horizontal, vertical, 45-deg and 135-deg orientations, h₀, h₉₀, h₄₅, and h₁₃₅). Described below, with respect to FIG. 4, are detailed examples for forming the edge indicators g_(1,1) . . . g_(8,8) from the RAW-data set 146.

After forming the orientation map, the flow 300 may transition to process block 308. At the process block 308, the processing platform 104, via the CFA-image-processing software 140, may interpolate the first color channel at the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206 as a function of the orientation map 148 so as to form a fourth set of pixels (“fourth-pixel set”) as represented by the first-interim-data set 150. The CFA-image-processing software 140 typically interpolates the first color channel for each pixel of any of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206. The CFA-image-processing software 140 may, however, interpolate the first color channel for less than all pixels of any of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206. For any given pixel 119 _(r,c) of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may initially populate the first-interim-data set 150 with the RAW-data set 146. This way, the first-interim-data points b_(1,1) . . . b_(8,8) initially map to the first-CFA-color-data, second-CFA-color-data and third-CFA-color-data sets A₁, A₂ and A₃.

In addition to populating the first-interim-data set 150, the CFA-image-processing software 140 may obtain, from the orientation map 148, the edge indicator g_(r,c) for the given pixel 119 _(r,c). The CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a first filter for estimating the first color channel at the given pixel 119 _(r,c). To facilitate such estimation, the first filter may be adapted to estimate the first color channel at the given pixel 119 _(r,c) as a function of a first gradient. This first gradient may be formed from one or more pixels of the first-CFA-color-pixel set 202 disposed in the edge bounding the given pixel 119 _(r,c) (“edge boundary”), as indicated by the edge indicator g_(r,c). The first filter, and in turn, the first gradient may be formed, for example, from a linear or non-linear analysis of one or more of the RAW-data points a_(1,1) . . . a_(8,8) of the first-CFA-color-data set, A₁, that correspond to the edge boundary (“edge-boundary-data set, A₁ _(—) _(edge)”).

After selecting the first filter, the CFA-image-processing software 140 may apply it, at the at pixel 119 _(r,c), to estimate the first color channel at the given pixel 119 _(r,c). To do this, the CFA-image-processing software 140 may compute the first gradient using the edge-boundary-data set, A₁ _(—) _(edge) to form an estimation of the first color channel (“first-color-channel estimation”). The CFA-image-processing software 140 may also amalgamate, coalesce, integrate or otherwise combine (collectively “combine”) the first-color-channel estimation with the RAW-data point a_(r,c), and store it as first-interim-data point b_(r,c).

By performing the forgoing for each pixel of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206, as appropriate, the CFA-image-processing software 140 may populate the first-interim-data set 150 so that it defines a color plane for the first color channel (“first-color plane”). That is, each of the first-interim-data points b_(1,1) . . . b_(8,8) may include a contribution from the first color channel. As such, the first-interim-data points b_(1,1) . . . b_(8,8) include (i) data for a first subset of pixels (“first/second-color-data set”), B₁, (ii) data for a second subset of pixels (“first/third-color-data set”), B₂, and (iii) the first-CFA-color-data set, A₁.

The first/second-color-data set, B₁, (e.g., first-interim-data point b_(j,k), where j is odd and k is even), when rendered, causes the first subset of pixels (“first/second-color-pixel set”) to be colored according to the second color channel and an estimate of the first color channel. The first/third-color-data set, B₂, (e.g., first-interim-data points b_(j,k), where j is even and k is odd), when rendered, causes the second subset of pixels (“first/third-color-pixel set”) to be colored according to the third color channel and an estimate of the first color channel.

After process block 308, the flow 300 may transition to process block 310. At the process block 310, the processing platform 104, via the CFA-image-processing software 140, may interpolate the second color channel at the first-CFA-color-pixel set 202 and first/third-color-pixel set as a function of the orientation map 148 and fourth-pixel set as represented by the first-interim-data set 150.

The CFA-image-processing software 140 typically interpolates the second color channel for each pixel of any of the first-CFA-color-pixel set 202 and first/third-color-pixel set. The CFA-image-processing software 140 may, however, interpolate the first color channel for less than all pixels of any of first-CFA-color-pixel set 202 and first/third-color-pixel set.

In addition, the CFA-image-processing software 140 may interpolate the second color channel for the first-CFA-color-pixel set 202 and the first/third-color-pixel set in one or more stages. For example, the CFA-image-processing software 140 may interpolate the second color channel for the first-CFA-color-pixel set 202 in a first stage, and for the first/third-color-pixel set in a second channel. At the first stage, the CFA-image-processing software 140 may interpolate any given pixel 119 _(r,c) of the first-CFA-color-pixel set 202 as follows.

The CFA-image-processing software 140 may initially populate the second-interim-data set 152 with the first-interim-data set 150. This way, the second-interim-data points c_(1,1) . . . c_(8,8) initially map to the first-CFA-color-data, first/second-color-data, and first/third-color-data sets A₁, B₁ and B₂.

The CFA-image-processing software 140 may obtain, from the orientation map 148, the edge indicator g_(r,c) for the given pixel 119 _(r,c). The CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a second filter for estimating the second color channel at the given pixel 119 _(r,c). To facilitate such estimation, the second filter may be adapted to estimate the second color channel at the given pixel 119 _(r,c) as a function of a second gradient. This second gradient may be formed from one or more pixels of the first/second-color-data set, B₁, disposed in the edge boundary indicated by the edge indicator g_(r,c). The second filter, and in turn, the second gradient may be formed, for example, from a linear or non-linear analysis of one or more of the first-interim-data points b_(1,1) . . . b_(8,8) of the first/second-color-data set, B₁, that correspond to the edge boundary (“edge-boundary-data set, B₁ _(—) _(edge1)”).

After selecting the second filter, the CFA-image-processing software 140 may apply it, at the at pixel 119 _(r,c), to estimate the second color channel at the given pixel 119 _(r,c). To do this, the CFA-image-processing software 140 may compute the second gradient using the edge-bounding-data set, B₁ _(—) _(edge1) to form an estimation of the second color channel (“second-color-channel estimation”). The CFA-image-processing software 140 may also combine the second-color-channel estimation with the first-interim-data point b_(r,c), and store it as second-interim-data point c_(r,c).

By performing the forgoing for each pixel of the first/second-color-data set, B₁, as appropriate, each of the second-interim-data points c_(1,1) . . . c_(8,8) corresponding to the first-CFA-color-pixel set 202 may include a contribution from the second color channel. As such, the second-interim-data points c_(1,1) . . . c_(8,8) include (i) data for an expanded first/second-color-data set, C₁, and (ii) the first/third-color-data set B₂.

The expanded first/second-color-data set, C₁, includes the first/second-color-data set, B₁, and the second-interim-data points c_(1,1) . . . c_(8,8) corresponding to the first-CFA-color-pixel set 202 interpolated in the first stage. Like the first/second-color-data set, B₁, the first/second-color-data set, C₁, when rendered, causes the first/second-color-pixel set to be colored according to (i) the second color channel and an estimate of the first color channel, and/or (ii) the first color channel and an estimate of the second color channel.

After the first stage, the CFA-image-processing software 140 may perform a second stage of the interpolation to form the third-interim-data set 154. To facilitate forming the third-interim-data set 154, the CFA-image-processing software 140 may initially populate the third-interim-data set 154 with the second-interim-data set 152. This way, the third-interim-data points d_(1,1) . . . d_(8,8) initially map to the first/second-color-data set, C₁, and the first/third-color-data set, B₂.

After populating the third-interim-data set 154, the CFA-image-processing software 140 may obtain, from the orientation map 148, the edge indicator g_(r,c) for the given pixel 119 _(r,c) of the first/third-color-pixel set. The CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a third filter for estimating the second color channel at the given pixel 119 _(r,c). To facilitate such estimation, the third filter may be adapted to estimate the second color channel at the given pixel 119 _(r,c) as a function of a third gradient. This third gradient may be formed from one or more pixels of the first/second-color-data set, C₁, disposed in the edge boundary indicated by the edge indicator g_(r,c). The third filter, and in turn, the third gradient may be formed, for example, from a linear or non-linear analysis of one or more of the second-interim-data points c_(1,1) . . . c_(8,8) of the first/second-color-data set, B₁, that correspond to the edge boundary (“edge-boundary-data set, B₁ _(—) _(edge2)”).

After selecting the third filter, the CFA-image-processing software 140 may apply it, at the at pixel 119 _(r,c), to estimate the second color channel at the given pixel 119 _(r,c). To do this, the CFA-image-processing software 140 may compute the third gradient using the edge-boundary-data set, B₁ _(—) _(edge2) to form another second-color-channel estimation. The CFA-image-processing software 140 may also combine such second-color-channel estimation with the third-interim-data point c_(r,c), and store it as third-interim-data point d_(r,c).

By performing the forgoing for each pixel of the first/third-color-data set, B₂, as appropriate, each of the third-interim-data points d_(1,1) . . . d_(8,8) corresponding to the first/third-color-pixel set may include a contribution from the second color channel. As such, the third-interim-data points d_(1,1) . . . d_(8,8) include (i) the expanded first/second-color-data set, C₁, and (ii) data for a third subset of pixels (“first/second/third-color-data set”), D₁. The first/second/third-color-data set, D₁, when rendered, causes the third subset of pixels (“first/second/third-color-pixel set”) to be colored according to the third color channel and estimates of the first and second color channels.

After process block 310, the flow 300 may transition to process block 312. At the process block 312, the processing platform 104, via the CFA-image-processing software 140, may interpolate the third color channel at the expanded first/second-color-data set, C₁, as a function of the orientation map 148 and the fourth-pixel set as represented by the third-interim-data set 154.

The CFA-image-processing software 140 typically interpolates the third color channel for each pixel of the expanded first/second-color-data set, C₁. The CFA-image-processing software 140 may, however, interpolate the third color channel for less than all pixels of expanded first/second-color-data set, C₁. For any given pixel of the expanded first/second-color-data set, C₁, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may initially populate the interpolated-data set 158 with the third-interim-data set 154. This way, the interpolated-data points f_(1,1) . . . f_(8,8) initially map to the expanded first/second-color-data set, C₁, and the first/second/third-color-data set, D₁.

The CFA-image-processing software 140 may obtain, from the orientation map 148, the edge indicator g_(r,c) for the given pixel 119 _(r,c). The CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a fourth filter for estimating the third color channel at the given pixel 119 _(r,c). To facilitate such estimation, the fourth filter may be adapted to estimate the third color channel at the given pixel 119 _(r,c) as a function of a fourth gradient. This fourth gradient may be formed from one or more pixels of the first/second/third-color-data set, D₁, disposed in the edge boundary indicated by the edge indicator g_(r,c). The fourth filter, and in turn, the fourth gradient may be formed, for example, from a linear or non-linear analysis of one or more of the third-interim-data points d_(1,1) . . . d_(8,8) of the first/second/third-color-data set, D₁, that correspond to the edge boundary (“edge-boundary-data set, D₁ _(—) _(edge)”).

After selecting the fourth filter, the CFA-image-processing software 140 may apply it, at the at pixel 119 _(r,c), to estimate the third color channel at the given pixel 119 _(r,c). To do this, the CFA-image-processing software 140 may compute the fourth gradient using the edge-boundary-data set, D₁ _(—) _(edge) to form an estimation of the third color channel (“third-color-channel estimation”). The CFA-image-processing software 140 may also combine the third-color-channel estimation with the third-interim-data point d_(r,c), and store it as interpolated-data point f_(r,c).

By performing the forgoing for each pixel of the expanded first/second-color-data set, C₁, as appropriate, the interpolated-data set 158 defines the first-color plane and second and third color planes. That is, each of the interpolated-data points f_(1,1) . . . f_(8,8) may include a contribution from the first, second and third color channels. As such, the interpolated-data points f_(1,1) . . . f_(8,8) include an expanded first/second/third-color-data set, F₁. The first/second/third-color-data set, F₁, when rendered, causes the first/second/third-color-pixel set to be colored according to (i) the first color channel and estimates of the second and third color channels, (ii) the second color channel and estimates of the first and third color channels, and/or (ii) the third color channel and estimates of the first and second color channels.

After process block 312, the flow 300 may transition to termination block 314. At termination block 314, the flow 300 may end. Alternatively, the flow 300 may be repeated periodically, in continuous fashion, or upon being triggered as a result of a condition, such as an impetus for forming one or more demosaiced images.

Alternative Example Operations

FIG. 4 is a flow diagram illustrating an example flow 400 for forming a demosaiced image from a CFA image. For convenience, the following describes the flow 400 with reference to the system 100 of FIG. 1 and the CFA image 200 of FIG. 2. The flow 400 may be carried out by other architectures as well.

The flow 400 starts at termination block 402, and sometime thereafter, transitions to process block 404. At process block 404, the processing platform 104 obtains from the imaging device 102 the RAW-data set 146. After process block 404, the flow 400 may transition to process block 406.

At process block 406, the processing platform 104, via the CFA-image-processing software 140, forms the orientation map 148. The CFA-image-processing software 140 may form the orientation map 148 as described above with respect to process block 306 of FIG. 3. In addition, the CFA-image-processing software 140 may resolve each edge indicator g_(r,c), of the edge indicators g_(1,1) . . . g_(8,8) to facilitate forming the orientation map. To resolve such edge indicator g_(r,c), the CFA-image-processing software 140 may examine some or all of the pixels 119 _(1,1) . . . 119 _(8,8) neighboring the pixel 119 _(r,c) (“neighboring pixels 119 _(r−n,c−n) . . . 119 _(r+n,c+n)”) to determine whether the edge indicator g_(r,c) is indicative of (i) the given construct or (ii) the orientation of the well-defined edge. To do this, the CFA-image-processing software 140 may form from the neighboring pixels 119 _(r−n,c−n) . . . 119 _(r+n,c+n) respective gradients at any of, and typically all of, the horizontal, vertical, 45-deg, and 135-deg orientations, h₀, h₉₀, h₄₅, and h₁₃₅. The CFA-image-processing software 140 may form such gradients as described below or, alternatively, using edge detection filtering.

The CFA-image-processing software 140 may use a standard edge detection filter or gradient based method for detecting horizontal edges. For example, the CFA-image-processing software 140 may form a horizontal gradient, i₀, at the horizontal orientation, h₀, for the pixel 119 _(r,c) as follows:

$\begin{matrix} {{i_{0}\left( 119_{r,c} \right)} = {\frac{{{a_{{r - 1},{c + 1}} - a_{{r - 1},{c - 1}}}} + {{a_{{r + 1},{c + 1}} - a_{{r + 1},{c - 1}}}}}{d} + {{a_{r,{c + 1}} - a_{r,{c - 1}}}}}} & (9) \end{matrix}$

where: 1<r<63 and is 1<c<63 for the RAW-data set 146, and d is the dependent upon the distance of the pixel in question. For r=1 and/or c=1 and for r=64 and/or c=64, padding is used to satisfy equation (9). Such padding may be formed using replication and/or mirroring.

The CFA-image-processing software 140 may form a vertical gradient, i₉₀, at the vertical orientation, h₉₀, for the pixel 119 _(r,c) as follows:

$\begin{matrix} {{i_{90}\left( 119_{r,c} \right)} = {\frac{\begin{matrix} {{{a_{{r - 1},{c - 1}} - a_{{r + 1},{c - 1}}}} +} \\ {{a_{{r - 1},{c + 1}} - a_{{r + 1},{c + 1}}}} \end{matrix}}{d} + {{a_{{r - 1},c} - a_{{r + 1},c}}}}} & (10) \end{matrix}$

where: 1<r<63 and is 1< c<63 for the RAW-data set 146, and d is the dependent upon the distance of the pixel in question. For r=1 and/or c=1 and for r=64 and/or c=64; padding is used to satisfy equation (10). The padding may be formed using replication and/or mirroring.

The same horizontal edge detector should be applied for all the pixels. Special padding will be done for the pixels near the corners of the image for creating the data required for edge detection

The CFA-image-processing software 140 may form a 45-deg gradient, i₄₅, at the 45-deg orientation, h₄₅, for the pixel 119 _(r,c) as follows:

$\begin{matrix} {{i_{45}\left( 119_{r,c} \right)} = {\frac{\begin{matrix} {{{a_{{r - 1},c} - a_{{r + 1},{c - 2}}}} +} \\ {{a_{{r - 1},{c + 2}} - a_{{r + 1},c}}} \end{matrix}}{2d} + \frac{{a_{{R - 1},{C + 1}} - a_{{R + 1},{C - 1}}}}{d}}} & (11) \end{matrix}$

where: 1< r<63 and is 2< c<62 for the RAW-data set 146, and d is the dependent upon the distance of the pixel in question. For r=1 and/or c<2 and for r=64 and/or c>62, padding is used to satisfy equation (11). The padding may be formed using replication and/or mirroring.

The CFA-image-processing software 140 may form a 135-deg gradient, i₁₃₅, at the 135-deg orientation, h₁₃₅, for the pixel 119 _(r,c) as follows:

$\begin{matrix} {{i_{135}\left( 119_{r,c} \right)} = {\frac{\begin{matrix} {{{a_{{r - 1},{c - 2}} - a_{{r + 1},c}}} +} \\ {{a_{{r - 1},c} - a_{{r + 1},{c + 2}}}} \end{matrix}}{2d} + \frac{{a_{{r - 1},{c - 1}} - a_{{r + 1},{c + 1}}}}{d}}} & (12) \end{matrix}$

where: 1< r<63 and is 2< c<62 for the RAW-data set 146, and d is the dependent upon the distance of the pixel in question. For r=1 and/or c<2 and for r=64 and/or c>62, padding is used to satisfy equation (12). Such padding may be formed using replication and/or mirroring.

After forming the horizontal, vertical, 45-deg and 135-deg gradients, i₀, i₉₀, i₄₅, and i₁₃₅, the CFA-image-processing software 140 may determine which, if any, of these gradients i₀, i₉₀, i₄₅, and i₁₃₅, indicate that the pixel 119 _(r,c) is bounded by the well-defined edge. The CFA-image-processing software 140 may, for example, make such determination as follows: [I₁,I₂,I₃,I₄]=SortAsc[i₀,i₄₅,i₉₀,i₁₃₅]  (13) if [I ₂ −I ₁≧τ₁], then bounded by the well-defined edge corresponding to gradient I ₁  (14)

where: τ₁ is a given threshold. This given threshold may be formed as a function of bit depths of the pixel 119 _(r,c).

The CFA-image-processing software 140 may also determine that the pixel 119 _(r,c) is not bounded by the well-defined edge. The CFA-image-processing software 140 may, for example, make this determination as follows: if [I ₂ −I ₁τ₁], then not bounded by the well-defined edge  (15)

After determining whether the pixel 119 _(r,c) is or is not bounded by the well-defined edge, the CFA-image-processing software 140 may resolve the edge indicator g_(r,c) to (i) the flat orientation, h_(f), when the pixel 119 _(r,c) is not bounded by the well-defined edge or (ii) the orientation corresponding to the gradient I₁ (i.e., the orientation corresponding to the horizontal, vertical, 45-deg and 135-deg gradient, i₀, i₉₀, i₄₅, and i₁₃₅ having the well-defined edge).

After forming the orientation map, the flow 400 may transition to process block 408. At the process block 408, the processing platform 104, via the CFA-image-processing software 140, obtains from the orientation map 148 the edge indicators g_(1,1) . . . g_(8,8) for the pixels 119 _(1,1) . . . 119 _(8,8). After process block 408, the flow 400 may transition to process block 410.

At the process block 410, the processing platform 104, via the CFA-image-processing software 140, may interpolate the first color channel at the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206 as a function of the orientation map 148 so as to form the fourth-pixel set as represented by the first-interim-data set 150. To facilitate forming the first-interim-data set 150, the CFA-image-processing software 140 may initially populate the first-interim-data set 150 with the RAW-data set 146. As above, the first-interim-data points b_(1,1) . . . b_(8,8) initially map to the first-CFA-color-data, second-CFA-color-data and third-CFA-color-data sets A₁, A₂ and A₃.

After populating the first-interim-data set 150, the CFA-image-processing software 140 may (i) interpolate the first color channel for any of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206 using the second-CFA-color-data and third-CFA-color-data sets A₂ and A₃; and (ii) populate the first-interim-data set 150 corresponding to the second-CFA-color-data and third-CFA-color-data sets A₂ and A₃ with data representative of the first color channel for the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206 so interpolated.

The CFA-image-processing software 140 typically interpolates the first color channel for each pixel of any of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206. The CFA-image-processing software 140 may, however, interpolate the first color channel for less than all pixels of any of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206. For any given pixel 119 _(r,c) of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may first obtain, from the edge indicators g_(1,1) . . . g_(8,8), the edge indicator g_(r,c) corresponding to the pixel 119 _(r,c). After obtaining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a filter (“FCC filter”) for estimating the first color channel at the pixel 119 _(r,c).

The FCC filter may be adapted to estimate the first color channel as a function of a first gradient formed from one or more of the first-CFA-color-pixel set 202 that are disposed in the edge boundary indicated by the edge indicator g_(r,c). The FCC filter, and in turn, the first gradient may be formed as a function of (i) a single subset of the first-CFA-color-pixel set 202 that are disposed in the edge boundary (“single-subset candidate”) or (ii) two subsets of the first-CFA-color-pixel set 202 that are disposed in the edge boundary (“double-subset candidate”). Table 1, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) one or more of possible single-subset candidates, and/or (ii) a possible double-subset candidate for forming the FCC filter.

TABLE 1 Edge Single-Subset Double-Subset Indicator Candidates Candidates Horizontal orientation, {a_(r,c−3) a_(r,c−1) a_(r,c+1) a_(r,c+3)} N/A h₀ Vertical orientation, h₉₀ {a_(r−3,c) a_(r,−1c) a_(r,+1c) a_(r+3,c)} N/A 45-deg orientation, h₄₅ Upper - {a_(r−2,c+1) a_(r−1,c) a_(r,c−1) a_(r+1,−c−2)} {a_(r−2,c+1) a_(r−1,c) a_(r,c−1) a_(r+1,−c−2)} Lower - {a_(r−1,c+2) a_(r,c+1) a_(r+1,c) a_(r+2,−c−1)} {a_(r−1,c+2) a_(r,c+1) a_(r+1,c) a_(r+2,−c−1)} 135-deg orientation, Upper - {a_(r−2,c−1) a_(r−1,c) a_(r,c+1) a_(r+1,−c+2)} {a_(r−2,c−1) a_(r−1,c) a_(r,c+1) h₁₃₅ a_(r+1,c+2)} Lower - {a_(r−1,c−2) a_(r,c−1) a_(r−1,c) a_(r+2,c+1)} {a_(r−1,c−2) a_(r,c−1) a_(r−1,c) a_(r+2,c+1)} Flat orientation, h_(f) N/A {a_(r,c−3) a_(r,c−1) a_(r,c+1) a_(r,c+3)} {a_(r−3,c) a_(r,−1c) a_(r,+1c) a_(r+3,c)}

In accord with the Table 1, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the FCC filter may be formed as a function of the single-subset candidate shown in Table 1, second row, second column, namely, a first horizontal-dataset candidate, can_(H1). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the FCC filter may be formed as a function of the single-subset candidate shown in Table 1, third row, second column, namely, a first vertical-dataset candidate, can_(V1). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the FCC filter may be formed as a function of the double-subset candidate shown in Table 1, sixth row, third column, namely, a first flat-subset candidate, can_(FLAT) _(—) _(DBL1).

Alternatively, when the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the FCC filter may be formed as a function of (i) one of two of the possible single-subset candidates, namely, an upper single-subset candidate (“45-upper-dataset candidate, can_(45U)”) or a lower single-subset candidate (“45-lower-dataset candidate, can_(45L)”), as shown in Table 1, fourth row, second column, or (ii) the double-subset candidate (“first 45-double-dataset candidate, can_(45DLB1)”), as shown in Table 1, fourth row, third column. Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the FCC filter may be formed as a function of (i) an upper single-subset candidate (“135-upper-dataset candidate, can_(135U)”) or a lower single-subset candidate (“135-lower-dataset candidate, can_(135L)”), as shown in Table 1, fifth row, second column, or (ii) the double-subset candidate (“first 135-double-dataset candidate, can_(135DBL1)”), as shown in Table 1, fifth row, third column.

To determine which of the can_(135U), can_(135L) or can_(135DBL1) (and/or the can_(45U), can_(45L) or can_(45DBL1)) to use for forming the FCC filter, the CFA-image-processing software 140 may determine, responsive to the edge indicator g_(r,c) being indicative of the 135-deg orientation, h₁₃₅ (and/or being indicative of the 45-deg orientation, h₄₅) which of such candidates is closely related to the pixel 119 _(r,c). By way of example, the CFA-image-processing software 140 may determine which of the can_(135U), can_(135L) or can_(135DBL1) to select as follows.

The CFA-image-processing software 140 may first select from the RAW-data set 148 a population of the RAW-data points a_(1,1) . . . a_(8,8) for evaluating the can_(135U) (“upper-candidate population” or “UCP_(r,c)”). In general, the upper-candidate population may include the can_(135U) along with the RAW-data points a_(1,1) . . . a_(8,8) that represent the neighboring pixels 119 _(1,1) . . . 119 _(8,8) that reside at the 135-deg orientation, h₁₃₅, (i) in line with the can_(135U) and/or (ii) offset from such neighboring pixels 119 _(1,1) . . . 119 _(8,8) by one or more columns in the positive direction. The upper-candidate population may include, for example:

$\begin{matrix} {{UCP}_{r,c} = \begin{pmatrix} a_{i,n} & \ldots & a_{i,m} \\ \; & \ddots & \vdots \\ \; & \; & a_{l,m} \end{pmatrix}} & (16) \end{matrix}$

where: 1≦i<8; i+1+|c−r|≦n≦7; i+1≦I≦7+|c−r|; and i+1≦m≦8.

After selecting the upper-candidate population, the CFA-image-processing software 140 may then calculate, as a function of the can_(135U), an average of the first color channel for the upper-candidate population, FCC _(upper). To calculate the FCC _(upper), the CFA-image-processing software 140 may apply the can_(135U) to a filter. Assuming that such filter is a four-tap filter as follows: i=[i₁ i₂ i₃ i₄]  (17)

then the FCC _(upper) may be expressed as and solved using: FCC _(upper) =i ₁ a _(r−2,c−1) +i ₂ a _(r−1,c) +i ₃ a _(r,c+1) +i ₄ a _(r+1,c+2))  (18)

After calculating the selecting the FCC _(upper), the CFA-image-processing software 140 may calculate a ratio of an average difference between (i) the first color channel of the upper-candidate population, FCC_(UCP), and (ii) a color channel matching or otherwise corresponding to a color channel of the pixel 119 _(r,c) (“corresponding-color channel” or “CCC_(UCP)”) of the upper-candidate population, ( FCC_(UCP)−CCC_(UCP) )_(upper). The ( FCC_(UCP)−CCC_(UCP) )_(upper) may be expressed as and solved using: ( FCC_(UCP)−CCC_(UCP) )_(upper)=0.5(a _(r−1,c) −a _(r−2,c))+0.5(a _(r,c+1) −a _(r,c+2))  (19)

After determining the ( FCC_(UCP)−CCC_(UCP) )_(upper), the CFA-image-processing software 140 may determine an estimate of corresponding-color channel of the upper-candidate population, CCC_(upper), as follows: CCC_(upper)= FCC _(upper)−( FCC_(UCP)−CCC_(UCP) )_(upper)  (20)

The CFA-image-processing software 140 may also select from the RAW-data set 148 another population of the RAW-data points a_(1,1) . . . a_(8,8) for evaluating the can_(135L) (“lower-candidate population” or “LCP_(r,c)”). In general, the lower-candidate population may include the can_(135L) along with the RAW-data points a_(1,1) . . . a_(8,8) that represent the neighboring pixels 119 _(1,1) . . . 119 _(8,8) that reside at the 135-deg orientation, h₁₃₅, (i) in line with the can_(135U) and/or (ii) offset from such neighboring pixels 119 _(1,1) . . . 119 _(8,8) by one or more columns in the negative direction. The lower-candidate population may include, for example:

$\begin{matrix} {{LCP}_{r,c} = \begin{pmatrix} a_{i,n} & \; & \; \\ {\vdots\;} & \ddots & \; \\ {a_{l,n}\;} & {\;\ldots} & a_{l,m} \end{pmatrix}} & (21) \end{matrix}$

where: 1≦i<8; i−1−|c−r|≦n≦7; i+1≦I≦8; and n+1≦m≦8.

After selecting the lower-candidate population, the CFA-image-processing software 140 may then calculate, as a function of the can_(135I,) an average of the first color channel for the lower-candidate population, FCC _(lower). To calculate the FCC _(lower), the CFA-image-processing software 140 may apply the can_(135L) to a filter, such as the four-tap filter of equation (25). Assuming the four-tap filter of equation (25), the FCC _(lower) may be expressed as and solved using: FCC _(lower) =i ₁ a _(r−1,c−2) +i ₂ a _(r,c−1) +i ₃ a _(r+1,c) +i ₄ a _(r+2,c+1))  (22)

After calculating the selecting the FCC _(lower), the CFA-image-processing software 140 may calculate a ratio of an average difference between (i) the first color channel of the lower-candidate population, FCC_(LCP), and (ii) the corresponding-color channel or CCC_(LCP) of the lower-candidate population, ( FCC_(LCP)−CCC_(LCP) )_(lower). The ( FCC_(LCP)−CCC_(LCP) )_(lower) may be expressed as and solved using: ( FCC_(LCP)−CCC_(LCP) )_(lower)=0.5(a _(r+1,c) −a _(r+2,c))+0.5(a _(r,c−1) −a _(r,c−2))  (23)

After determining the ( FCC_(LCP)−CCC_(LCP) )_(lower), the CFA-image-processing software 140 may determine an estimate of the corresponding-color channel of the lower-candidate population, CCC_(lower), as follows: CCC_(lower)= FCC _(lower)−( FCC_(LCP)−CCC_(LCP) )_(lower)  (24)

After making these calculations, the CFA-image-processing software 140 may determine which, if any, of the can_(135U) or can_(135I) indicates a similarity to the corresponding-color channel of the pixel 119 _(r,c). The CFA-image-processing software 140 may facilitate this by calculating upper and lower similarity functions, S_(upper) and S_(lower), respectively. The S_(upper) and S_(lower) may be expressed and solved using: S _(upper) =|a _(r,c)−CCC_(upper)| and S _(lower) =|a _(r,c)−CCC_(lower)|  (25)-(26)

After calculating the S_(upper) and S_(lower), the CFA-image-processing software 140 may adjudge the S_(upper) and S_(lower) to first determine whether either of the can_(135U) or can_(135I) indicates a similarity to the corresponding-color channel of the pixel 119 _(r,c). To do this, the CFA-image-processing software 140 may evaluate a similarity-discriminator function, SDF. The SDF may be expressed as and solved using:

$\begin{matrix} {{SDF} = \begin{Bmatrix} {{{{if}\mspace{14mu}{{S_{upper} - S_{lower}}}} \leq \tau_{2}},{{{then}\mspace{14mu}{SDF}} = {null}}} \\ {{{{else}\mspace{14mu}{if}\mspace{14mu} S_{upper}} < S_{lower}},{{{then}\mspace{14mu}{SDF}} = {upper}}} \\ {{{{else}\mspace{14mu}{if}\mspace{14mu} S_{upper}} > S_{lower}},{{{then}\mspace{14mu}{SDF}} = {lower}}} \end{Bmatrix}} & (27) \end{matrix}$

where: τ₂ is a given threshold. This given threshold may be formed as a function of bit depths of the 119 _(r,c); and may be approximately zero (null) if normalized.

Responsive to evaluating the SDF, the CFA-image-processing software 140 may select (i) the can_(135DBL1) when SDF=null (i.e., when neither can_(135U) nor can_(135I) indicates the similarity to the corresponding-color channel of the pixel 119 _(r,c)), (ii) the can_(135U) when the SDF=upper (i.e., when the can_(135U) indicates the similarity to the corresponding-color channel of the pixel 119 _(r,c)) or (iii) the can_(135L) when the SDF=lower (i.e., when the can_(135I) indicates the similarity to the corresponding-color channel of the pixel 119 _(r,c)).

One skilled in the art may easily modify equations (16)-(17) for selecting the can_(45U), can_(45L), or can_(45DBL1). For ease of exposition, each of the can_(H), can_(V), can_(45U), can_(45L), can_(135U), and can_(135L), may be referred to herein, generically, as the single-dataset candidate; and each of the can_(FLAT) _(—) _(DBL), can_(45DBL) and can_(135DBL) may be referred to herein, generically, as the double-dataset candidate.

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the pixel 119 _(r,c), the CFA-image-processing software 140 may apply the FCC filter to obtain the first color channel for the pixel 119 _(r,c). Assuming that the FCC filter is the four-tap filter of equation (17), the CFA-image-processing software 140 may apply, for the single-subset candidates can_(H1), can_(V1), can_(45U), can_(45L), can_(135U) and can_(135L), the FCC filter to obtain the first-interim-data point b_(r,c) as follows: b _(r,c) =i ₁ v ₁ +i ₂ v ₂ +i ₃ v ₃ +i ₄ v ₄ +HF _(sd)  (28)

where: [v₁,v₂,v₃,v₄]=single-dataset candidate from TABLE 1, and HF_(sd) is a high-frequency component for the single-dataset candidate. The high-frequency component may be calculated based on a residual value of current colors of neighborhood pixels 119 _(r−n, c−n) . . . 119 _(r+n, c+n) This high-frequency component, which is described in more detail below, may be defined as follows:

$\begin{matrix} {{H\; F_{sd}} = \left\{ \begin{matrix} {\frac{{2*a_{r,c}} - a_{r,{c - 2}} - a_{r,{c + 2}}}{4};{{{if}\mspace{14mu}{HF}} < {\delta\mspace{14mu}{and}\mspace{14mu}{horizontal}}}} \\ {{\frac{{2*a_{r,c}} - a_{{r - 2},a} - a_{{r + 2},c}}{4};{{{if}\mspace{20mu}{HF}} < {\delta\mspace{14mu}{and}\mspace{14mu}{vertical}}}}\mspace{14mu}} \\ {{0;{otherwise}}\mspace{391mu}} \end{matrix} \right.} & (29) \end{matrix}$

By way of example, the CFA-image-processing software 140 may obtain the first color channel for the pixel 119 _(r,c) using can_(H1) as follows:

$\begin{matrix} {b_{r,c} = {{{- \frac{1}{16}}a_{r,{c - 3}}} + {\frac{9}{16}a_{r,{c - 1}}} + {\frac{9}{16}a_{r,{c + 1}}} - {\frac{1}{16}a_{r,{c + 3}}} + {H\; F_{sd}}}} & \left( {{EX}\mspace{14mu} 1} \right) \end{matrix}$

For the double-subset candidates can_(45DLB1), can_(135DBL1) and can_(FLAT) _(—) _(DBL1), the CFA-image-processing software 140 may apply the FCC filter to obtain the first-interim-data point b_(r,c) as follows:

$\begin{matrix} {b_{r,c} = {{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}} + {H\; F_{dd}}}} & (30) \end{matrix}$

where:

$\begin{matrix} {{w_{1} = {{\sum\limits_{i = 1}^{4}{{{v_{1,i} - {can}_{1}}}\mspace{14mu}{and}\mspace{14mu} w_{2}}} = {\sum\limits_{i = 1}^{4}{{v_{2,i} - {can}_{2}}}}}};} & (31) \\ {{{{can}_{1} = {{i_{1}v_{11}} + {i_{2}v_{22}} + {i_{3}v_{13}} + {i_{4}v_{14}}}};}{{{can}_{2} = {{i_{1}v_{21}} + {i_{2}v_{22}} + {i_{3}v_{23}} + {i_{4}v_{24}}}};}} & (32) \end{matrix}$

[v₁₁,v₁₂,v₁₃,v₁₄]=first of double-dataset candidate from TABLE 1;

[v₂₁,v₂₂,v₂₃,v₂₄]=second of double-dataset candidate from TABLE 1; and

the HF_(dd) is the high-frequency component, which is described in more detail below and may be defined as follows:

$\begin{matrix} {{H\; F_{dd}} = \left\{ \begin{matrix} {\frac{{2*a_{r,c}} - a_{{r - 2},{c + 2}} - a_{{r + 2},{c - 2}}}{4};{{{if}\mspace{14mu}{HF}} < {\delta\mspace{14mu}{and}\mspace{14mu} 45^{\circ}}}} \\ {\frac{{2*a_{r,c}} - a_{{r - 2},{c - 2}} - a_{{r + 2},{c + 2}}}{4};{{{if}\mspace{20mu}{HF}} < {\delta\mspace{14mu}{and}\mspace{14mu} 45^{\circ}}}} \\ {{\frac{\begin{matrix} {{4*a_{r,c}} - a_{r,{c - 2}} -} \\ {a_{r,{c + 2}} - a_{{r - 2},c} - a_{{r + 2},c}} \end{matrix}}{8};{{{if}\mspace{14mu}{HF}} < {\delta\mspace{14mu}{and}\mspace{14mu}{flat}}}}\mspace{65mu}} \\ {{0;{otherwise}}\mspace{371mu}} \end{matrix} \right.} & (33) \end{matrix}$

After obtaining the first color channel for the pixel 119 _(r,c), the CFA-image-processing software 140 may populate the first-interim-data set 150 with the first-interim-data point b_(r,c). This way, after performing the equations (17)-(33) for each pixel of the second-CFA-color-pixel and third-CFA-color-pixel sets 204, 206, as appropriate, the first-interim-data set 150 defines a color plane for the first color channel (“first-color plane”). That is, each of the first-interim-data points b_(1,1) . . . b_(8,8) may include a contribution from the first color channel. As such, the first-interim-data points b_(1,1) . . . b_(8,8) include (i) the first/second-color-data set B₁, and (ii) the first/third-color-data set B₂.

After process block 410, the flow 400 may transition to process block 412. At the process block 412, the processing platform 104, via the CFA-image-processing software 140, may interpolate the second and third color channels as a function of the orientation map 148 and the fourth-pixel set so as to form an interpolated-pixel set as represented by the interpolated-data set 158. The CFA-image-processing software 140 may form the interpolated-pixel set in one or more stages. For simplicity of exposition, however, the following describes the CFA-image-processing software 140 forming the interpolated-pixel set using more than one stage.

At a first stage, the CFA-image-processing software 140 forms the second-interim-data set 152. To facilitate forming the second-interim-data set 152, the CFA-image-processing software 140 may initially populate the second-interim-data set 152 with the first-interim-data set 150. This way, the second-interim-data points c_(1,1) . . . c_(8,8) initially map to the first-CFA-color-data set, first/second-color-data set and first/third-color-data set A₁, B₁ and B₂.

After populating the second-interim-data set 152, the CFA-image-processing software 140 may (i) interpolate the second color channel for any of the first-CFA-color-pixel set 202 using first/second-color-data set B₁; and (ii) populate the second-interim-data set 150 corresponding to the first-CFA-color-data set A₁ with data representative of the second color channel for the first-CFA-color-pixel set 202 so interpolated.

The CFA-image-processing software 140 typically interpolates the second color channel for each pixel of the first-CFA-color-pixel set 202. The CFA-image-processing software 140 may, however, interpolate the second color channel for less than all pixels of the first-CFA-color-pixel set 202. For any given pixel 119 _(r,c) of the first-CFA-color-pixel set 202, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may first obtain, from the edge indicators g_(1,1) . . . g_(8,8), the edge indicator g_(r,c) corresponding to the pixel 119 _(r,c). After obtaining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a filter (“SCC filter”) for estimating the second color channel at the pixel 119 _(r,c).

The SCC filter may be adapted to estimate the second color channel as a function of a second gradient formed from one or more of the first/second-color-pixel set that are disposed in the edge boundary indicated by the edge indicator g_(r,c). The SCC filter, and in turn, the second gradient may be formed as a function of (i) a single-subset candidate of the first/second-color-pixel set that are disposed in the edge boundary or (ii) a double-subset candidate of the first/second-color-pixel set that are disposed in the edge boundary. Table 2, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidates or (ii) a possible double-subset candidate for forming the SCC filter.

TABLE 2 Edge Single-Subset Double-Subset Indicator Candidate(s) Candidates h₀ {b_(r,c−3) b_(r,c−1) b_(r,c+1) b_(r,c+3)} N/A h₉₀ N/A {b_(r−2,c−1) b_(r−2,c−1) b_(r+2,c−1)} {b_(r−2,c+1) b_(r−2,c+1) b_(r+2,c+1)} h₄₅ N/A {b_(r−2,c+1) b_(r,c−1) b_(r+2,c−3)} {b_(r−2,c+3) b_(r,c+1) b_(r+2,c−1)} h₁₃₅ N/A {b_(r−2,c−1) b_(r,c+1) b_(r+2,c+3)} {b_(r−2,c−3) b_(r,c−1) b_(r+2,c+1)} _(hf) N/A {b_(r−2,c−1) b_(r,c−1) b_(r+2,c−1)} {b_(r−2,c+1) b_(r,c+1) b_(r+2,c+1)}

In accord with the Table 2, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the SCC filter may be formed as a function of the single-subset candidate shown in Table 2, second row, second column, namely, a second horizontal-dataset candidate, can_(H2). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the SCC filter may be formed as a function of the double-subset candidate shown in Table 2, third row, third column, namely, a first vertical-double-dataset candidate, can_(V) _(—) _(DBL1). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the SCC filter may be formed as a function of the double-subset candidate shown in Table 2, sixth row, third column, namely, a second flat-subset candidate, can_(FLAT) _(—) _(DBL2).

Alternatively, when the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the SCC filter may be formed as a function of the double-subset candidate shown in Table 2, fourth row, third column, namely, a second 45-double-dataset candidate, can_(45DLB2). Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the SCC filter may be formed as a function of the double-subset candidate shown in Table 2, fifth row, third column, namely, a second 135-double-dataset candidate, can_(135DBL2).

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the pixel 119 _(r,c), the CFA-image-processing software 140 may apply the SCC filter to obtain the second color channel for the pixel 119 _(r,c). Assuming that the SCC filter is the four-tap filter of equation (25), the CFA-image-processing software 140 may apply, for the single-subset candidate can_(H2), the FCC filter to obtain the second-interim-data point c_(r,c) as follows: j _(r,c) =i ₁ v ₁ +i ₂ v ₂ +i ₃ v ₃ +i ₄ v ₄  (34) and c _(r,c) =b _(r,c) −j _(r,c)  (35)

where: [v₁,v₂,v₃,v₄]=single-dataset candidate from TABLE 2. By way of example, the CFA-image-processing software 140 may obtain the second color channel for the pixel 119 _(r,c) for the can_(H2) as follows: j _(r,c) =i ₁ b _(r,c−3) +i ₂ b _(r,c−1) +i ₃ b _(r,c+1) i ₄ b _(r,c+3) and c _(r,c) =b _(r,c) −j _(r,c)  (EX 2)

For the double-dataset candidates can_(V) _(—) _(DBL1), can_(45DLB2), can_(135DBL2) and can_(FLAT) _(—) _(DBL2), the SCC filter may be a three-tap filter, such as: k=[k₁ k₂ k₃]  (36)

Assuming the three-tap filter of equation (44), the CFA-image-processing software 140 may apply the SCC filter to obtain the second-interim-data point c_(r,c) for the can_(V) _(—) _(DBL1), can_(45DLB2), and can_(135DBL2) as follows:

$\begin{matrix} {j_{r,c} = {{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}}} & (37) \end{matrix}$

where:

$\begin{matrix} {{w_{1} = {{\sum\limits_{i = 1}^{3}{{{v_{1,i} - {can}_{1}}}\mspace{14mu}{and}\mspace{14mu} w_{2}}} = {\sum\limits_{i = 1}^{3}{{v_{2,i} - {can}_{2}}}}}};} & (38) \\ {{{{can}_{1} = {{k_{1}v_{11}} + {k_{2}v_{12}} + {k_{3}v_{13}}}};}{{{can}_{2} = {{k_{1}v_{21}} + {k_{2}v_{22}} + {k_{3}v_{23}}}};}} & (39) \end{matrix}$

[v₁₁,v₁₂,v₁₃]=first of double-dataset candidate from TABLE 2;

[v₂₁,v₂₂,v₂₃]=second of double-dataset candidate from TABLE 2; and c _(r,c) =b _(r,c) −j _(r,c)  (40)

For the can_(FLAT) _(—) _(DBL2), the CFA-image-processing software 140 may apply the SCC filter to obtain the second-interim-data point c_(r,c) as follows:

$\begin{matrix} {j_{r,c} = \left\{ \begin{matrix} {{{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}};{{{if}\mspace{14mu}{{w_{2} - w_{1}}}} > \tau_{3}}} \\ {{\frac{b_{r,{c - 1}} - b_{r,{c + 1}}}{2};{else}}\mspace{304mu}} \end{matrix} \right.} & (41) \end{matrix}$

where:

τ₃ is a given threshold;

$\begin{matrix} {{w_{1} = {{{2*b_{r,{c - 1}}} - b_{{r - 2},{c - 1}} - b_{{r + 2},{c - 1}}}}}{and}{{w_{2} = {{{2*b_{r,{c + 1}}} - b_{{r - 2},{c + 1}} - b_{{r + 2},{c + 1}}}}};}} & (42) \end{matrix}$ can₁ =k ₁ v ₁₁ +k ₂ v ₁₂ +k ₃ v ₁₃; can₂ =k ₁ v ₂₁ +k ₂ v ₂₂ +k ₃ v ₂₃  (43)

[v₁₁,v₁₂,v₁₃]=first of double-dataset candidate from TABLE 2;

[v₂₁,v₂₂,v₂₃]=second of double-dataset candidate from TABLE 2; and c _(r,c) =b _(r,c) −j _(r,c)  (44)

After obtaining the second color channel for the pixel 119 _(r,c), the CFA-image-processing software 140 may populate the second-interim-data set 152 with the second-interim-data point c_(r,c). This way, after performing the equations (34)-(44) for each pixel of the first-CFA-color-pixel set 202, as appropriate, each of the second-interim-data points c_(1,1) . . . c_(8,8) corresponding to the first-CFA-color-pixel set 202 may include a contribution from the second color channel. As such, the second-interim-data points c_(1,1) . . . c_(8,8) include (i) the expanded first/second-color-data set, C₁, and (ii) the first/third-color-data set B₂. The expanded first/second-color-data set, C₁, includes the first/second-color-data set, B₁, and the second-interim-data points c_(1,1) . . . c_(8,8) corresponding to the first-CFA-color-pixel set 202 interpolated in the first stage.

After the first stage, the CFA-image-processing software 140 may perform a second stage of interpolation to form the third-interim-data set 154. To facilitate forming the third-interim-data set 154, the CFA-image-processing software 140 may initially populate the third-interim-data set 154 with the second-interim-data set 152. This way, the third-interim-data points d_(1,1) . . . d_(8,8) initially map to a remaining portion of the first-CFA-color-data set, A₁, the expanded first/second-color-data set, C₁, and the first/third-color-data set, B₂.

After populating the third-interim-data set 154, the CFA-image-processing software 140 may (i) interpolate the third color channel for any of the remaining portion of the first-CFA-color-pixel set 202 using first/third-color-data set B₂; and (ii) populate the third-interim-data set 154 corresponding to the remaining portion of the first-CFA-color-pixel set 202 with data representative of the third color channel for the first-CFA-color-pixel set 202 so interpolated.

The CFA-image-processing software 140 typically interpolates the third color channel for each pixel of the remaining portion of the first-CFA-color-pixel set 202. The CFA-image-processing software 140 may, however, interpolate the third color channel for less than all pixels of the remaining portion of the first-CFA-color-pixel set 202. For any given pixel 119 _(r,c) of the remaining portion of the first-CFA-color-pixel set 202, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may first obtain, from the edge indicators g_(1,1) . . . g_(8,8), the edge indicator g_(r,c) corresponding to the pixel 119 _(r,c). After obtaining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a filter (“TCC filter”) for estimating the third color channel at the pixel 119 _(r,c).

The TCC filter may be adapted to estimate the third color channel as a function of a third gradient formed from one or more of the first/third-color-pixel set that are disposed in the edge boundary indicated by the edge indicator g_(r,c). The TCC filter, and in turn, the third gradient may be formed as a function of (i) a single-subset candidate of the first/third-color-pixel set that are disposed in the edge boundary or (ii) a double-subset candidate of the first/third-color-pixel set that are disposed in the edge boundary. Table 3, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidate or (ii) a possible double-subset candidate for forming the TCC filter.

TABLE 3 Edge Single-Subset Double-Subset Indicator Candidate(s) Candidate h₀ N/A {C_(r−1,c−2) C_(r−1,c) C_(r−1,c+2)} {C_(r+1,c−2) C_(r+1,c) C_(r+1,c+2)} h₉₀ {C_(r−3,c) C_(r−1,c) C_(r+1,c) C_(r+3,c)} N/A h₄₅ N/A {C_(r−3,c+2) C_(r−1,c) C_(r+1,c−2)} {C_(r−1,c+2) C_(r+1,c) C_(r+3,c−2)} h₁₃₅ N/A {C_(r−3,c-2) C_(r−1,c) C_(r+1,c+2)} {C_(r−1,c−2) C_(r+1,c) C_(r+3,c+2)} h_(f) N/A {C_(r−1,c−2) C_(r−1,c) C_(r−1,c+2)} {C_(r+1,c−2) C_(r+1,c) C_(r+1,c+2)}

In accord with the Table 3, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the TCC filter may be formed as a function of the double-subset candidate shown in Table 3, second row, third column, namely, a first horizontal-double-dataset-candidate, can_(H) _(—) _(DBL1). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the TCC filter may be formed as a function of the single-subset candidate shown in Table 3, third row, second column, namely, a second vertical-dataset candidate, can_(V2). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the TCC filter may be formed as a function of the double-subset candidate shown in Table 3, sixth row, third column, namely, a third flat-subset candidate, can_(FLAT) _(—) _(DBL3).

When the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the TCC filter may be formed as a function of the double-subset candidate shown in Table 3, fourth row, third column, namely, a third 45-double-dataset candidate, can_(45DLB3). Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the TCC filter may be formed as a function of the double-subset candidate shown in Table 3, fifth row, third column, namely, a third 135-double-dataset candidate, can_(135DBL3).

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the pixel 119 _(r,c), the CFA-image-processing software 140 may apply the TCC filter to obtain the third color channel for the pixel 119 _(r,c). Assuming that the TCC filter is the four-tap filter of equation (17), the CFA-image-processing software 140 may apply, for the single-dataset candidate, can_(V2), the TCC filter to obtain the third-interim-data point d_(r,c) as follows: m _(r,c) =i ₁ v ₂ +i ₂ v ₂ +i ₃ v ₃ +i ₄ v ₄  (45) and d _(r,c) =c _(r,c) −m _(r,c)  (46)

where: [v₁,v₂,v₃,v₄]=single-dataset candidate from TABLE 3. By way of example, the CFA-image-processing software 140 may obtain the third color channel for the pixel 119 _(r,c) for the can_(V2) as follows: m _(r,c) =i ₁ c _(r−3,c) +i ₂ c _(r−1,c) +i ₄ c _(r+1,c) +i ₄ c _(r+3,c); and d _(r,c) =c _(r,c) −m _(r,c)  (EX 3)

For the double-dataset candidates can_(H) _(—) _(DBL1), can_(45DLB3), can_(135DBL3) and can_(FLAT) _(—) _(DBL3), the TCC filter may be a three-tap filter, such as: n=[n₁ n₂ n₃]  (47)

Assuming the three-tap filter of equation (55), the CFA-image-processing software 140 may apply the TCC filter to obtain the third-interim-data point d_(r,c) for the can_(H) _(—) _(DBL1), can_(45DLB3) and can_(135DBL3) as follows:

$\begin{matrix} {m_{r,c} = {{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}}} & (48) \end{matrix}$

where:

$\begin{matrix} {{w_{1} = {{\sum\limits_{i = 1}^{3}{{{v_{1,i} - {can}_{1}}}\mspace{14mu}{and}\mspace{14mu} w_{2}}} = {\sum\limits_{i = 1}^{3}{{v_{2,i} - {can}_{2}}}}}};} & (49) \\ {{{{can}_{1} = {{n_{1}v_{11}} + {n_{2}v_{12}} + {n_{3}v_{13}}}};}{{{can}_{2} = {{n_{1}v_{21}} + {n_{2}v_{22}} + {n_{3}v_{23}}}};}} & (50) \end{matrix}$

[v₁₁,v₁₂,v₁₃]=first of double-dataset candidate from TABLE 3;

[v₂₁,v₂₂,v₂₃]=second of double-dataset candidate from TABLE 3; and d _(r,c) =c _(r,c) −m _(r,c)  (51)

For the can_(FLAT) _(—) _(DBL3), the CFA-image-processing software 140 may apply the TCC filter to obtain the third-interim-data point d_(r,c) as follows:

$\begin{matrix} {m_{r,c} = \left\{ \begin{matrix} {{{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}};{{{{if}\mspace{14mu}{{w_{1} - w_{2}}}} >}\top_{4}}} \\ {\frac{c_{{r - 1},c} - c_{{r + 1},c}}{2};{else}} \end{matrix} \right.} & (52) \end{matrix}$

where:

τ₄ is a given threshold; w ₁=|2*c _(r−1,c) −c _(r−1,c−2) −b _(r−12,c+2)| and w ₂−|2*c _(r+1,c) −c _(r+1,c) −c _(r−1,c+2)|  (53) can₁ =n ₁ v ₁₁ +n ₂ v ₁₂ +n ₃ v ₁₃; can₂ =n ₁ v ₂₁ +n ₂ v ₂₂ +n ₃ v ₂₃  (54)

[v₁₁,v₁₂,v₁₃]=first of double-dataset candidate from TABLE 3;

[v₂₁,v₂₂,v₂₃]=second of double-dataset candidate from TABLE 3; and d _(r,c) =c _(r,c) −m _(r,c)  (55)

After obtaining the third color channel for the pixel 119 _(r,c), the CFA-image-processing software 140 may populate the third-interim-data set 154 with the third-interim-data point d_(r,c). This way, after performing the equations (45)-(55) for each pixel of the remaining portion of the first-CFA-color-pixel set 202, as appropriate, each of the third-interim-data points d_(1,1) . . . d_(8,8) corresponding to such first-CFA-color-pixel set 202 may include a contribution from the third color channel. As such, the third-interim-data points d_(1,1) . . . d_(8,8) include (i) the expanded first/second-color-data set, C₁, and (ii) an expanded first/third-color-data set, D₁.

The expanded first/third-color-data set, D₁, includes the first/third-color-data set, B₂, and the third-interim-data points d_(1,1) . . . d_(8,8) corresponding to the remaining portion of the first-CFA-color-pixel set 202 interpolated in the second stage. Like the first/third-color-data set, B₂, the expanded first/third-color-data set, D₁, when rendered, causes the first/third-color-pixel set to be colored according to (i) the third color channel and an estimate of the first color channel, and/or (ii) the first color channel and an estimate of the third color channel.

After the second stage, the CFA-image-processing software 140 performs a third stage of interpolation to form the fourth-interim-data set 156. To facilitate forming the fourth-interim-data set 156, the CFA-image-processing software 140 may initially populate the fourth-interim-data set 156 with the third-interim-data set 154. This way, the fourth-interim-data points e_(1,1) . . . e_(8,8) initially map to the expanded first/second-color-data set, C₁, and the expanded first/third-color-data set, D₁.

After populating the fourth-interim-data set 156, the CFA-image-processing software 140 may (i) interpolate the second color channel for any of the first/third-color-pixel set using first/second-color-data set, C₁; and (ii) populate the fourth-interim-data set 156 corresponding to the expanded first/third-color-data set, D₁, with data representative of the second color channel for the first/third-color-pixel set so interpolated.

The CFA-image-processing software 140 typically interpolates the second color channel for each pixel of the first/third-color-pixel set. The CFA-image-processing software 140 may, however, interpolate the second color channel for less than all pixels of the first/third-color-pixel set. For any given pixel 119 _(r,c) of the first/third-color-pixel set, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may first obtain, from the edge indicators g_(1,1) . . . g_(8,8), the edge indicator g_(r,c) corresponding to the pixel 119 _(r,c). After obtaining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select the SCC filter, as a function of the edge indicator g_(r,c). As noted above, the SCC filter, and in turn, the second gradient may be formed as a function of (i) a single-subset candidate of the first/second-color-pixel set that are disposed in the edge boundary or (ii) a double-subset candidate of the first/second-color-pixel set that are disposed in the edge boundary. Table 4, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidate or (ii) a possible double-subset candidate for forming the SCC filter.

TABLE 4 Edge Single-Subset Double-Subset Indicator Candidates Candidates h₀ N/A {d_(r−1,c−3) d_(r−1,c−1) d_(r−1,c+1) d_(r−1,c+3)} {d_(r+1,c−3) d_(r+1,c−1) d_(r+1,c+1) d_(r+1,c+3)} h₉₀ N/A {d_(r−3,c−1) d_(r−1,c−1) d_(r+1,c−1) d_(r+3,c−1)} {d_(r−3,c+1) d_(r−1,c+1) d_(r+1,c+1) d_(r+3,c+1)} h₄₅ {d_(r−3,c+3) d_(r−1,c+1) N/A d_(r+1,c−1) d_(r+3,c−3)} h₁₃₅ {d_(r−3,c−3) d_(r−1,c−1) N/A d_(r+1,c=1) d_(r+3,c=3)} h_(f) N/A {d_(r−3,c+3) d_(r−1,c+1) d_(r+1,c−1) d_(r+3,c−3)} {d_(r−3,c−3) d_(r−1,c−1) d_(r+1,c=1) d_(r+3,c=3)}

In accord with the Table 4, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the SCC filter may be formed as a function of the double-subset candidate shown in Table 4, second row, third column, namely, a second horizontal-double-dataset-candidate, can_(H) _(—) _(DBL2). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the SCC filter may be formed as a function of the double-subset candidate shown in Table 4, third row, third column, namely, a second vertical-double-dataset candidate, can_(V) _(—) _(DBL2). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the SCC filter may be formed as a function of the double-subset candidate shown in Table 4, sixth row, third column, namely, a fourth flat-subset candidate, can_(FLAT) _(—) _(DBL4).

When the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the SCC filter may be formed as a function of the single-subset candidate shown in Table 4, fourth row, second column, namely, a second 45-dataset candidate, can₄₅ _(—) ₂. Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the SCC filter may be formed as a function of the single-subset candidate shown in Table 4, fifth row, second column, namely, a second 135-dataset candidate, can₁₃₅ _(—) ₂.

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the pixel 119 _(r,c), the CFA-image-processing software 140 may apply the SCC filter to obtain the second color channel for the pixel 119 _(r,c). Assuming that the SCC filter is the four-tap filter of equation (17), the CFA-image-processing software 140 may apply, for the single-dataset candidates, can₄₅ _(—) ₂ and can₁₃₅ _(—) ₂, the SCC filter to obtain the fourth-interim-data point e_(r,c) as follows: p _(r,c) =i ₁ v ₁ +i ₂ v ₂ +i ₃ v ₃ +i ₄ v ₄  (56) and e _(r,c) =d _(r,c) −p _(r,c)  (57)

where: [v₁,v₂,v₃,v₄]=single-dataset candidate from TABLE 4.

For the can_(H) _(—) _(DBL2), can_(V) _(—) _(DBL2) and can_(FLAT) _(—) _(DBL4), the CFA-image-processing software 140 may apply the SCC filter to obtain the fourth-interim-data point e_(r,c) as follows:

$\begin{matrix} {p_{r,c} = {{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}}} & (58) \end{matrix}$

where:

$\begin{matrix} {{w_{1} = {{\sum\limits_{i = 1}^{4}{{{v_{1,i} - {can}_{1}}}\mspace{14mu}{and}\mspace{14mu} w_{2}}} = {\sum\limits_{i = 1}^{4}{{v_{2,i} - {can}_{2}}}}}};} & (59) \\ {{{{can}_{1} = {{i_{1}v_{11}} + {i_{2}v_{12}} + {i_{3}v_{13}} + {i_{4}v_{14}}}};}{{{can}_{2} = {{i_{1}v_{21}} = {{i_{2}v_{22}} + {i_{3}v_{23}} + {i_{4}v_{24}}}}};}} & (60) \end{matrix}$

[v₁₁,v₁₂,v₁₃,v₁₄]=first of double-dataset candidate from TABLE 4;

[v₂₁,v₂₂,v₂₃,v₂₄]=second of double-dataset candidate from TABLE 4; and e _(r,c) =d _(r,c) −p _(r,c)  (61)

After obtaining the second color channel for the pixel 119 _(r,c), the CFA-image-processing software 140 may populate the fourth-interim-data set 156 with the fourth-interim-data point e_(r,c). This way, after performing the equations (56)-(61) for each pixel of the first/third-color-pixel set, as appropriate, the fourth-interim-data set 156 defines the first-color plane and a color plane for the second color channel (“second-color plane”). That is, each of the fourth-interim-data points e_(1,1) . . . e_(8,8) may include a contribution from the first and second color channels.

As such, the fourth-interim-data points e_(1,1) . . . e_(8,8) include (i) the expanded first/second-color-data set, C₁, and (ii) data for a set of pixels having contributions from the first, second and third color channels, namely, a first/second/third-color-data set, E₁. The first/second/third-color-data set, E₁, when rendered, causes the first/second/third-color-pixel set to be colored according to (i) the first color channel and estimates of the second and third color channels, and/or (ii) the third color channel and estimates of the first and second color channels.

After the third stage, the CFA-image-processing software 140 performs a fourth or final stage of interpolation to form the interpolated-data set 158. To facilitate forming the interpolated-data set 158, the CFA-image-processing software 140 may initially populate the interpolated-data set 158 with the fourth-interim-data set 156. This way, the interpolated-data points f_(1,1) . . . f_(8,8) initially map to the expanded first/second-color-data set, C₁, and the first/second/third-color-data set, E₁.

After populating the interpolated-data set 158, the CFA-image-processing software 140 may (i) interpolate the third color channel for any of the first/second-color-pixel set using first/third-color-data set, D₁; and (ii) populate the interpolated-data set 158 corresponding to the expanded first/second-color-data set, C₁, with data representative of the third color channel for the first/second-color-pixel set so interpolated.

The CFA-image-processing software 140 typically interpolates the third color channel for each pixel of the first/second-color-pixel set. The CFA-image-processing software 140 may, however, interpolate the third color channel for less than all pixels of the first/second-color-pixel set. For any given pixel 119 _(r,c) of the first/second-color-pixel set, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may first obtain, from the edge indicators g_(1,1) . . . g_(8,8), the edge indicator g_(r,c) corresponding to the pixel 119 _(r,c). After obtaining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select the TCC filter, as a function of the edge indicator g_(r,c). As noted above, the TCC filter, and in turn, the third gradient may be formed as a function of (i) a single-subset candidate of the first/third-color-pixel set that are disposed in the edge boundary or (ii) a double-subset candidate of the first/third-color-pixel set that are disposed in the edge boundary. Table 5, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidates or (ii) a possible double-subset candidate for forming the TCC filter.

TABLE 5 Edge Single-Subset Double-Subset Indicator Candidates Candidates h₀ N/A {d_(r−1,c−3) d_(r−1,c−1) d_(r−1,c+1) d_(r−1,c+3)} {d_(r+1,c−3) d_(r+1,c−1) d_(r+1,c+1) d_(r+1,c+3)} h₉₀ N/A {d_(r−3,c−1) d_(r−1,c−1) d_(r+1,c−1) d_(r+3,c−1)} {d_(r−3,c+1) d_(r−1,c+1) d_(r+1,c+1) d_(r+3,c+1)} h₄₅ {d_(r−3,c+3) d_(r−1,c+1) N/A d_(r+1,c−1) d_(r+3,c−3)} h₁₃₅ {d_(r−3,c−3) d_(r−1,c−1) N/A d_(r+1,c=1) d_(r+3,c=3)} h_(f) N/A {d_(r−3,c+3) d_(r−1,c+1) d_(r+1,c−1) d_(r+3,c−3)} {d_(r−3,c−3) d_(r−1,c−1) d_(r+1,c=1) d_(r+3,c=3)}

In accord with the Table 5, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the TCC filter may be formed as a function of the double-subset candidate shown in Table 5, second row, third column, namely, a third horizontal-double-dataset-candidate, can_(H) _(—) _(DBL3). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the TCC filter may be formed as a function of the double-subset candidate shown in Table 5, third row, third column, namely, a third vertical-double-dataset candidate, can_(V) _(—) _(DBL3). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the TCC filter may be formed as a function of the double-subset candidate shown in Table 5, sixth row, third column, namely, a fifth flat-subset candidate, can_(FLAT) _(—) _(DBL5).

When the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the TCC filter may be formed as a function of the single-subset candidate shown in Table 5, fourth row, second column, namely, a third 45-dataset candidate, can₄₅ _(—) ₃. Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the TCC filter may be formed as a function of the single-subset candidate shown in Table 5, fifth row, second column, namely, a third 135-dataset candidate, can₁₃₅ _(—) ₃.

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the pixel 119 _(r,c), the CFA-image-processing software 140 may apply the TCC filter to obtain the second color channel for the pixel 119 _(r,c). Assuming that the TCC filter is the four-tap filter of equation (17), the CFA-image-processing software 140 may apply, for the single-dataset candidates, can₄₅ _(—) ₃ and can₁₃₅ _(—) ₃, the TCC filter to obtain the interpolated-data point f_(r,c) as follows: q _(r,c) =i ₁ v ₁ +i ₂ v ₂ +i ₃ v ₃ +i ₄ v ₄  (62) and f _(r,c) =e _(r,c) −q _(r,c)  (63)

where: [v₁,v₂,v₃,v₄]=single-dataset candidate from TABLE 5.

For the can_(H) _(—) _(DBL3), can_(V) _(—) _(DBL3) and can_(FLAT) _(—) _(DBL5), the CFA-image-processing software 140 may apply the TCC filter to obtain the interpolated-data point f_(r,c) as follows:

$\begin{matrix} {q_{r,c} = {{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}}} & (64) \end{matrix}$

where:

$\begin{matrix} {{w_{1} = {{\sum\limits_{i = 1}^{4}{{{v_{1,i} - {can}_{1}}}\mspace{14mu}{and}\mspace{14mu} w_{2}}} = {\sum\limits_{i = 1}^{4}{{v_{2,i} - {can}_{2}}}}}};} & (65) \\ {{{{can}_{1} = {{i_{1}v_{11}} + {i_{2}v_{12}} + {i_{3}v_{13}} + {i_{4}v_{14}}}};}{{{can}_{2} = {{i_{1}v_{21}} + {i_{2}v_{22}} + {i_{3}v_{23}} + {i_{4}v_{24}}}};}} & (66) \end{matrix}$

[v₁₁,v₁₂,v₁₃,v₁₄]=first of double-dataset candidate from TABLE 5;

[v₂₁,v₂₂,v₂₃,v₂₄]=second of double-dataset candidate from TABLE 5; and f _(r,c) =e _(r,c) −q _(r,c)  (67)

After obtaining the third color channel for the pixel 119 _(r,c), the CFA-image-processing software 140 may populate the interpolated-data set 158 with the interpolated-data point f_(r,c). This way, after performing the equations (62)-(67) for each pixel of the first/second-color-pixel set, as appropriate, the interpolated-data set 158 defines the first-color plane, the second-color plane and a color plane for the third color channel (“third-color plane”). That is, each of the interpolated-data points f_(1,1) . . . f_(8,8) may include a contribution from the first, second and third color channels. As such, the interpolated-data points f_(1,1) . . . f_(8,8) include an expanded first/second/third-color-data set or interpolated-data set, F₁. The interpolated-data set, F₁, when rendered, causes the interpolated-pixel set to be colored according to (i) the first color channel and estimates of the second and third color channels, (ii) the second color channel and estimates of the first and third color channels, and/or (ii) the third color channel and estimates of the first and second color channels.

After completing the final stage at the process block 412, the flow 400 may transition to termination block 414. At the termination block 414, the flow 400 may end. Alternatively, the flow 400 may be repeated periodically, in continuous fashion, or upon being triggered as a result of a condition, such as an impetus for forming one or more demosaiced images.

Although in the foregoing description the equations (9)-(67) assume a square-shaped sample, the equations (9)-(67) may be modified to accommodate other geometric shaped samples, such as hexagonal, triangular, trapezoidal, tetragonal, trapezium, deltoidal, pentagonal, rhomboidal, etc. shaped samples. And although the foregoing description references three and four tap filters, other sized filters may be used in lieu of or in addition to such three and four tap filters.

Example Color Correction

Referring now to FIG. 5, a flow diagram illustrating an example flow 500 for performing color correction of a demosaiced image formed from a CFA image is shown. The flow 500 of FIG. 5 is similar to the flow 400 of FIG. 4, except as described herein below.

After forming the interpolated-pixel set at process block 412, the processing platform 104, via the CFA-image-processing software 140, may perform color correction to the interpolated-pixel set 158, as shown in process block 502. The CFA-image-processing software 140 may perform the color correction as a function of (i) one or more differences between the first, second and third color planes, and (ii) the orientation map 148. For example, the CFA-image-processing software 140 may, for any given pixel 119 _(r,c) of the interpolated-data set, F₁, perform color correction by determining first, second and third color correction factors, namely, FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)); one for each of the contribution of the first, second and third color channels. The CFA-image-processing software 140 may determine each of the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as follows.

The CFA-image-processing software 140 may first obtain, from the orientation map 148, the edge indicator g_(r,c) for the given pixel 119 _(r,c). The CFA-image-processing software 140 may then form the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as a function of filtering (e.g., median or linear filtering) of the neighboring pixels 119 _(r−n,c−n) . . . 119 _(r+n,c+n) disposed in the edge boundary indicated by the edge indicator g_(r,c).

When the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the CFA-image-processing software 140 may form the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as follow:

$\begin{matrix} {{{{FCC}\left( f_{r,c} \right)} = {\frac{1}{2}\left\lbrack {\left( {\overset{\_}{fs} + {{scc}\left( f_{r,c} \right)}} \right) + \left( {\overset{\_}{f\; t} + {{tcc}\left( f_{r,c} \right)}} \right)} \right\rbrack}};} & (68) \\ {{{{SCC}\left( f_{r,c} \right)} = {{{FCC}\left( f_{r,c} \right)} - \overset{\_}{fs}}};} & (69) \\ {{{{TCC}\left( f_{r,c} \right)} = {{{FCC}\left( f_{r,c} \right)} - \overset{\_}{f\; t}}};} & (70) \\ {{{\overset{\_}{fs} = {{median}\left\lbrack {{{fs}\left( f_{r,{c - 2}} \right)},{{fs}\left( f_{r,{c - 1}} \right)},{{fs}\left( f_{r,c} \right)},{{fs}\left( f_{r,{c + 1}} \right)},{{fs}\left( f_{r,{c + 2}} \right)}} \right\rbrack}};}{and}} & (71) \\ {\overset{\_}{f\; t} = {{median}\left\lbrack {{f\;{t\left( f_{r,{c - 2}} \right)}},{f\;{t\left( f_{r,{c - 1}} \right)}},{f\; t\left( f_{r,c} \right)},{f\; t\left( f_{r,{c + 1}} \right)},{f\;{t\left( f_{r,{c + 2}} \right)}}} \right\rbrack}} & (72) \end{matrix}$

where: fs(f_(r,c)) is a difference between the first and second color channels of the given pixel 119 _(r,c); fs(f_(r,c−2)),fs(f_(r,c−1)),fs(f_(r,c+1)),fs(f_(r,c+2)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r,c−n) . . . 119 _(r,c+n); ft(f_(r,c)) is a difference between the first and third color channels of the given pixel 119 _(r,c); and ft(f_(r,c−2)),ft(f_(r,c−1)),ft(f_(r,c+1)),ft(f_(r,c+2)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r,c−n) . . . 119 _(r,c+n).

When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the CFA-image-processing software 140 may form the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as above, except that: fs =median[fs(f _(r−2,c)),fs(f _(r−1,c)),fs(f _(r,c)),fs(f _(r+1,c)),fs(f _(r+2,c))]  (73) and ft =median[ft(f _(r−2,c)),ft(f _(r−1,c)),ft(f _(r,c)),ft(f _(r+1,c)),ft(f _(r+2,c))]  (74)

where: fs (f_(r−2,c)),fs(f_(r−1,c)),fs(f_(r+1,c)),fs(f_(r+2,c)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r−m,c) . . . 119 _(r+m,c); and ft(f_(r−2,c)),ft(f_(r−1,c)),ft(f_(r+1,c)),ft(f_(r+2,c)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r−m,c) . . . 119 _(r+m,c).

When the edge indicator g_(r,c) is indicative of the 45-deg. orientation, h₄₅, the CFA-image-processing software 140 may form the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as above, except that: fs =median[fs(f _(r−2,c+2)),fs(f _(r−1,c+1)),fs(f _(r,c)),fs(f _(r+1,c−1)),fs(f _(r+2,c−2))]  (75) and ft =median[ft(f _(r−2,c+2)),ft(f _(r−1,c+1)),ft(f _(r,c)),ft(f _(r+2,c−2))]  (76)

where: fs(f_(r−2,c+2)),fs(f_(r−1,c+1)),fs(f_(r+1,c−1)),fs(f_(r+2,c−2)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r−m,c+n) . . . 119 _(r+m,c−n); and ft(f_(r−2,c+2)),ft(f_(r−1,c+1)),ft(f_(r+1,c−1)),ft(f_(r+2,c−1)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r−m,c+n) . . . 119 _(r+m,c−n).

When the edge indicator g_(r,c) is indicative of the 135-deg. orientation, h₁₃₅, the CFA-image-processing software 140 may form the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as above, except that: fs =median[fs(f _(r−2,c−2)),fs(f _(r−1,c−1)),fs(f _(r,c)),fs(f _(r−1,c+1)),fs(f _(r−2,c+2))]  (77) and ft =median[ft(f _(r−2,c−2)),ft(f _(r−1,c−1)),ft(f _(r,c)),ft(f _(r+1,c+1)),ft(f _(r+2,c+2))]  (78)

where: fs(f_(r−2,c−2)),fs(f_(r−1,c−1)),fs(f_(r+1,c+1)),fs(f_(r+2,c+2)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r−m,c−n) . . . 119 _(r+m,c+n); and ft(f_(r−2,c−2)),ft(f_(r−1,c−1)),ft(f_(r+1,c+1)),ft(f_(r+2,c+2)) are respective differences between the first and second color channels of the neighboring pixels 119 _(r−m,c−n) . . . 119 _(r+m,c+n).

When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the CFA-image-processing software 140 may form the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)) as follows. The CFA-image-processing software 140 may first check whether the neighboring pixels 119 _(r−n,c−n) . . . 119 _(r+n,c+n) are indicative of a horizontal, val_(h), or vertical preference, val_(v). To do this, the CFA-image-processing software 140 may first determine: val₁=(f(f _(r,c−1))+f(f _(r,c+1)))  (79) and val₁=(f(f _(r−1,c))+f(f _(r+1,c)))  (80)

where: f(f_(r−1,c)),f(f_(r,c+1)),f(f_(r−1,c)),f(f_(r+1,c)) are first color channel contributions for the neighboring pixels 119 _(r−n,c−n) . . . 119 _(r+n,c+n). When the CFA-image-processing software 140 determines that |val₁−val₂|>τ₅ (where τ₅ is a given threshold), then the neighboring pixels 119 _(r−n,c−n) . . . 119 _(r+n,c+n) are indicative of either the horizontal, val_(h), or vertical preference, val_(v). When the given pixel 119 _(r,c) originates from the third-color-pixel set, the CFA-image-processing software 140 may determine the horizontal, val_(h) and vertical preference, val_(v), as follows: val_(h)=|2*t(f _(r,c))−t(f _(r,c−1))−t(f _(r,c+1))|  (81) and val_(v)=|2*t(f _(r,c))−t(f _(r−1,c))−t(f _(r+1,c))|  (82)

where: t(f_(r,c)) is the third color channel contribution of the given pixel 119 _(r,c); t(f_(r,c−1)),t(f_(r,c+1)) are the third color channel contributions of the neighboring pixels 119 _(r,c−n) . . . 119 _(r,c+n); and t(f_(r−1,c)),t(f_(r−1,c)) are the third color channel contributions of the neighboring pixels 119 _(r,c−n) . . . 119 _(r,c+n). After determining the horizontal, val_(h) and vertical preference, val_(h), the CFA-image-processing software 140 may determine:

$\begin{matrix} {{{{TCC}\left( f_{r,c} \right)} = {t\left( f_{r,c} \right)}};} & (83) \\ {{{FCC}\left( f_{r,c} \right)} = \left\{ \begin{matrix} {{{- \frac{1}{8}}{f\left( f_{r,{c - 2}} \right)}} + {\frac{5}{8}{f\left( f_{r,{c - 1}} \right)}} + {\frac{5}{8}{f\left( f_{r,{c + 1}} \right)}} +} \\ {{\frac{1}{8}{f\left( f_{r,{c + 2}} \right)}};{{val}_{v} > \left( {{{val}_{h} +}\top_{6}} \right)}} \\ {{{{- \frac{1}{8}}{f\left( f_{{r - 2},c} \right)}} + {\frac{5}{8}{f\left( f_{{r - 1},c} \right)}} + {\frac{5}{8}{f\left( f_{{r + 1},c} \right)}} + {\frac{1}{8}{f\left( f_{{r + 2},c} \right)}}};} \\ {{val}_{h} > \left( {{{valv} +}\top_{6}} \right)} \\ {{\frac{1}{2}\left\lbrack {\left( {\overset{\_}{fs} + {{scc}\left( f_{r,c} \right)}} \right) + \left( {\overset{\_}{f\; t} + {{tcc}\left( f_{r,c} \right)}} \right)} \right\rbrack};{else}} \end{matrix} \right.} & (84) \\ {\overset{\_}{fs} = \left\{ \begin{matrix} {{{{fs}\left( f_{r,{c - 1}} \right)};{{val}_{v} > \left( {{{val}_{h} +}\top_{6}} \right)}}\mspace{169mu}} \\ {{{{fs}\left( f_{{r - 1},c} \right)};{{val}_{h} > \left( {{{valv} +}\top_{6}} \right)}}\mspace{169mu}} \\ {{{median}\left\lbrack {{{fs}\left( f_{r,{c - 2}} \right)},{{fs}\left( f_{r,{c - 1}} \right)},{{fs}\left( f_{r,c} \right)},{{fs}\left( f_{r,{c + 1}} \right)},{{fs}\left( f_{r,{c + 2}} \right)}} \right\rbrack};{else};} \end{matrix} \right.} & (85) \\ {{{SCC}\left( f_{r,c} \right)} = {{{FCC}\left( f_{r,c} \right)} - \overset{\_}{fs}}} & (86) \end{matrix}$

Where: τ₆ is a given threshold.

After determining the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)), the CFA-image-processing software 140 may apply them to the given pixel 119 _(r,c). The CFA-image-processing software 140 may, for example, replace the first, second and third color channel contributions of the given pixel 119 r,c of f_(r,c) with the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)), respectively. Alternatively, the CFA-image-processing software 140 may combine the first, second and third color channel contributions of the given pixel 119 _(r,c) of f_(r,c) with the FCC(f_(r,c)), SCC(f_(r,c)) and TCC(f_(r,c)).

After performing the color correction at the process block 502, the flow 500 may transition to termination block 504. At the termination block 504, the flow 500 may end. Alternatively, the flow 500 may be repeated periodically, in continuous fashion, or upon being triggered as a result of a condition, such as an impetus for forming one or more demosaiced images.

Example Digital Zoom

FIG. 6 is a flow diagram illustrating an example flow 600 for performing a digital zoom of a demosaiced image formed from a CFA image. The flow 600 of FIG. 6 is similar to the flow 500 of FIG. 5, except as described herein below.

After forming the interpolated-pixel set at process block 412 or performing color correction at process block 502, the processing platform 104, via the CFA-image-processing software 140, may perform a digital zoom of the interpolated-pixel set 158, as shown in process block 602. To facilitate this, the CFA-image-processing software 140 may first populate the zoom-data set 160 with the interpolated-pixel set 158. Assuming a zoom factor of two, the zoom-data points z_(1,1) . . . z_(p,q), may map to the interpolated-data points f_(1,1) . . . f_(j,k), where p and q are both odd.

After populating the zoom-data set 160, the CFA-image-processing software 140 interpolates (i) each of the expanded set of the pixels (“expanded-pixel set”) 119 _(1,1) . . . 119 _(p,q), where p and q are both even (“first expanded-pixel subset”); (ii) each of the expanded set of the pixels 119 _(1,1) . . . 119 _(p,q), where p is odd and q is even (“second expanded-pixel subset”); and (iii) each of the expanded set of the pixels 119 _(1,1) . . . 119 _(p,q), where p is even q is odd (“third expanded-pixel subset”). The CFA-image-processing software 140 may interpolate any given expansion pixel 119 _(r,c) of the first expanded-pixel subset as follows.

The CFA-image-processing software 140 may first repopulate the orientation map 148 to redistribute the edge indicators g_(1,1) . . . g_(8,8) so that they map to the expanded-pixel set 119 _(1,1) . . . 119 _(p,q), where p and q are both odd (“fourth expanded-pixel subset”). Thereafter, the CFA-image-processing software 140 may obtain, from the edge indicators g_(1,1) . . . g_(p,q), the edge indicators g_(r−1,c−1), g_(r+1,c−1), g_(r−1,c+1), g_(r+1,c+1). The CFA-image-processing software 140 may then determine, from the edge indicators g_(r−1,c−1), g_(r+1,c−1), g_(r−1,c+1), g_(r+1,c+1), the edge indicator g_(r,c) for the expansion pixel 119 _(r,c). The CFA-image-processing software 140 may determine the edge indicator g_(r,c) by:

$\begin{matrix} {g_{r,c} = \left\{ \begin{matrix} {{{flat};{{if}\mspace{14mu}{at}\mspace{14mu}{least}\mspace{14mu}{two}\mspace{14mu}{{of}\;\left\lbrack {g_{{r - 1},{c - 1}},g_{{r + 1},{c - 1}},g_{{r - 1},{c + 1}},g_{{r + 1},{c + 1}}} \right\rbrack}\mspace{14mu}{are}\mspace{14mu}{flat}}}\mspace{59mu}} \\ {{h_{0};{{{if}\mspace{14mu} 0} < {{mean}\;\left\lbrack {{{val}\left( g_{{r - 1},{c - 1}} \right)},{{val}\left( g_{{r + 1},{c - 1}} \right)},{{val}\left( g_{{r - 1},{c + 1}} \right)},{{val}\left( g_{{r + 1},{c + 1}} \right)}} \right\rbrack} < {23{^\circ}}}}\mspace{56mu}} \\ {{h_{45};{{{if}\mspace{14mu} 23} < {{mean}\mspace{11mu}\left\lbrack {{{val}\left( g_{{r - 1},{c - 1}} \right)},{{val}\left( g_{{r + 1},{c - 1}} \right)},{{val}\left( g_{{r - 1},{c + 1}} \right)},{{val}\left( g_{{r + 1},{c + 1}} \right)}} \right\rbrack} < {67{^\circ}}}}\mspace{25mu}} \\ {{h_{v};{{{if}\mspace{14mu} 23} < {{mean}\left\lbrack {{{val}\left( g_{{r - 1},{c - 1}} \right)},{{val}\left( g_{{r + 1},{c - 1}} \right)},{{val}\left( g_{{r - 1},{c + 1}} \right)},{{val}\left( g_{{r + 1},{c + 1}} \right)}} \right\rbrack} < {112{^\circ}}}}\mspace{34mu}} \\ {h_{135};{{{if}\mspace{14mu} 112} < {{mean}\left\lbrack {{{val}\left( g_{{r - 1},{c - 1}} \right)},{{val}\left( g_{{r + 1},{c - 1}} \right)},{{val}\left( g_{{r - 1},{c + 1}} \right)},{{val}\left( g_{{r + 1},{c + 1}} \right)}} \right\rbrack} < {157{^\circ}}}} \end{matrix} \right.} & (87) \end{matrix}$

After determining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a first-zoom filter (“FZ filter”) for estimating the first, second and third color channels at the expansion pixel 119 _(r,c). The FZ filter may be adapted to estimate the first, second and third color channels as a function of a first-zoom gradient formed from one or more of the fourth expanded-pixel subset.

The FZ filter, and in turn, the first-zoom gradient may be formed as a function of (i) a single-subset candidate of the fourth expanded-pixel set or (ii) a double-subset candidate of the fourth expanded-pixel set. Table 6, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidate or (ii) a possible double-subset candidate for forming the FZ filter.

TABLE 6 Edge Single-Subset Double-Subset Indicator Candidates Candidates h₀ N/A {Z_(r−1,c−3) Z_(r−1,c−1) Z_(r−1,c+1) Z_(r−1,c+3)} {Z_(r+1,c−3) Z_(r+1,c−1) Z_(r+1,c+1) Z_(r+1,c+3)} h₉₀ N/A {Z_(r−3,c−1) Z_(r−1,c−1) Z_(r+1,c−1) Z_(r+3,c−1)} {Z_(r−3,c+1) Z_(r−1,c+1) Z_(r+1,c+1) Z_(r+3,c+1)} h₄₅ {Z_(r−3,c+3) Z_(r−1,c+1) N/A Z_(r+1,c−1) Z_(r+3,c−3)} h₁₃₅ {Z_(r−3,c−3) Z_(r−1,c−1) N/A Z_(r+1,c=1) Z_(r+3,c=3)} h_(f) N/A {Z_(r−3,c+3) Z_(r−1,c+1) Z_(r+1,c−1) Z_(r+3,c−3)} {Z_(r−3,c−3) Z_(r−1,c−1) Z_(r+1,c+1) Z_(r+3,c+3)}

In accord with the Table 6, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the FZ filter may be formed as a function of the double-subset candidate shown in Table 6, second row, third column, namely, a fourth horizontal-double-dataset-candidate, can_(H) _(—) _(DBL4). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the FZ filter may be formed as a function of the double-subset candidate shown in Table 6, third row, third column, namely, a fourth vertical-double-dataset candidate, can_(V) _(—) _(DBL4). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the FZ filter may be formed as a function of the double-subset candidate shown in Table 6, sixth row, third column, namely, a sixth flat-subset candidate, can_(FLAT) _(—) _(DBL6).

When the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the FZ filter may be formed as a function of the single-subset candidate shown in Table 6, fourth row, second column, namely, a fourth 45-dataset candidate, can₄₅ _(—) ₄. Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the FZ filter may be formed as a function of the single-subset candidate shown in Table 6, fifth row, second column, namely, a fourth 135-dataset candidate, can₁₃₅ _(—) ₄.

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the expansion pixel 119 _(r,c), the CFA-image-processing software 140 may apply the FZ filter to obtain the first, second and third color channels for the expansion pixel 119 _(r,c). Assuming that the FZ filter is the four-tap filter of equation (17), the CFA-image-processing software 140 may apply, for the single-dataset candidates, can₄₅ _(—) ₄ and can₁₃₅ _(—) ₄, the FZ filter to obtain the zoom-data point z_(r,c) as follows: s _(r,c) =i ₁ v ₁ +i ₂ v ₂ +i ₃ v ₃ +i ₄ v ₄  (88) and z _(r,c) =z _(r,c) −s _(r,c)  (89)

where: [v₁,v₂,v₃,v₄]=single-dataset candidate from TABLE 6.

For the can_(H) _(—) _(DBL4), can_(V) _(—) _(DBL4) and can_(FLAT) _(—) _(DBL6), the CFA-image-processing software 140 may apply the FZ filter to obtain the zoom-data point z_(r,c) as follows:

$\begin{matrix} {s_{r,c} = {{\frac{w_{2}}{w_{1} + w_{2}}{can}_{1}} + {\frac{w_{1}}{w_{1} + w_{2}}{can}_{2}}}} & (90) \end{matrix}$

where:

$\begin{matrix} {{w_{1} = {{\sum\limits_{i = 1}^{4}{{{v_{1,i} - {can}_{1}}}\mspace{14mu}{and}\mspace{14mu} w_{2}}} = {\sum\limits_{i = 1}^{4}{{v_{2,i} = {can}_{2}}}}}};} & (91) \\ {{{{can}_{1} = {{i_{1}v_{11}} + {i_{2}v_{12}} + {i_{3}v_{13}} + {i_{4}v_{14}}}};}{{{can}_{2} = {{i_{1}v_{21}} + {i_{2}v_{22}} + {i_{3}v_{23}} + {i_{4}v_{24}}}};}} & (92) \end{matrix}$

[v₁₁,v₁₂,v₁₃,v₁₄]=first of double-dataset candidate from TABLE 6;

[v₂₁,v₂₂,v₂₃,v₂₄]=second of double-dataset candidate from TABLE 6; and z _(r,c) =z _(r,c) −s _(r,c)  (93)

After obtaining the first, second and third color channels for the expansion pixel 119 _(r,c), the CFA-image-processing software 140 may populate (i) the zoom-data set 160 with the zoom-data point z_(r,c), and (ii) the orientation map 148 with the edge indicator g_(r,c). This way, after performing the equations (87)-(93) for each pixel of the first expanded-pixel subset, as appropriate, the zoom-data set 160 defines the first, second and third color channels for the first expanded-pixel subset, and the orientation map 148 includes the edge indicators g_(1,1) . . . g_(p,q) for such first expanded-pixel subset.

After interpolating the first expanded-pixel subset, the CFA-image-processing software 140 may interpolate the second expanded-pixel subset. For any given expansion pixel 119 _(r,c) of the second expanded-pixel subset, the CFA-image-processing software 140 may interpolate it as follows.

The CFA-image-processing software 140 may obtain, from the edge indicators g_(1,1) . . . g_(p,q), the edge indicators g_(r,c−1), g_(r+2,c−1), g_(r,c+1), g_(r+2,c+1). Thereafter, the CFA-image-processing software 140 may then determine, from the edge indicators g_(r,c−1), g_(r+2,c−1), g_(r,c+1), g_(r+2,c+1), the edge indicator g_(r,c) for the expansion pixel 119 _(r,c). The CFA-image-processing software 140 may determine the edge indicator g_(r,c) by:

$\begin{matrix} {g_{r,c} = \left\{ \begin{matrix} {{{flat};{{if}\mspace{14mu}{at}\mspace{14mu}{least}\mspace{14mu}{two}\mspace{14mu}{{of}\;\left\lbrack {g_{r,{c - 1}},g_{{r + 2},{c - 1}},g_{r,{c + 1}},g_{{r + 2},{c + 1}}} \right\rbrack}\mspace{11mu}{are}\mspace{14mu}{flat}}}\mspace{65mu}} \\ {{h_{0};{{{if}\mspace{14mu} 0} < {{mean}\mspace{11mu}\left\lbrack {{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{{r + 2},{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)},{{val}\left( g_{{r + 2},{c + 1}} \right)}} \right\rbrack} < {23{^\circ}}}}\mspace{31mu}} \\ {{h_{45};{{{if}\mspace{14mu} 23} < {{mean}\left\lbrack {{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{{r + 2},{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)},{{val}\left( g_{{r + 2},{c + 1}} \right)}} \right\rbrack} < {67{^\circ}}}}\mspace{34mu}} \\ {{h_{v};{{{if}\mspace{14mu} 67} < {{mean}\left\lbrack {{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{{r + 2},{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)},{{val}\left( g_{{r + 2},{c + 1}} \right)}} \right\rbrack} < {112{^\circ}}}}\mspace{31mu}} \\ {h_{135};{{{if}\mspace{14mu} 112} < {{mean}\left\lbrack {{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{{r + 2},{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)},{{val}\left( g_{{r + 2},{c + 1}} \right)}} \right\rbrack} < {157{^\circ}}}} \end{matrix} \right.} & (94) \end{matrix}$

After determining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a second zoom filter (“SZ filter”) for estimating the first, second and third color channels at the expansion pixel 119 _(r,c). The SZ filter may be adapted to estimate the first, second and third color channels as a function of a second zoom gradient formed from the expanded-pixel set.

The SZ filter, and in turn, the second zoom gradient may be formed as a function of (i) a single-subset candidate of the expanded-pixel set or (ii) a double-subset candidate of the expanded-pixel set. Table 7, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidate or (ii) a possible double-subset candidate for forming the SZ filter.

TABLE 7 Edge Single-Subset Double-Subset Indicator Candidates Candidates h₀ {Z_(r,c−3) Z_(r,c−1) N/A Z_(r,c+1) Z_(r,c+3)} h₉₀ {Z_(r−2,c) Z_(r−1,c) Z_(r+1,c) N/A (Z_(r+2,c−1+) Z_(r+2,c+1))/2} h₄₅ N/A {Z_(r−2,c+1) Z_(r−1,c) Z_(r,c−1) Z_(r+1,c−2)} {Z_(r−1,c+2) Z_(r,c+1) Z_(r+1,c) Z_(r+2,c−1)} h₁₃₅ N/A {Z_(r−2,c−1) Z_(r−1,c) Z_(r,c+1) Z_(r+1,c+2)} {Z_(r−1,c−2) Z_(r,c−1) Z_(r+1,c) Z_(r+2,c+1)} h_(f) N/A {Z_(r,c−3) Z_(r,c−1) Z_(r,c+1) Z_(r,c+3)} {Z_(r−2,c) Z_(r−1,c) Z_(r+1,c) (Z_(r+2,c−1+) Z_(r+2,c+1))/2}

In accord with the Table 7, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the SZ filter may be formed as a function of the single-subset candidate shown in Table 7, second row, second column, namely, a third horizontal-single-dataset-candidate, can_(H3). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the SZ filter may be formed as a function of the single-subset candidate shown in Table 7, third row, second column, namely, a third vertical-single-dataset candidate, can_(V3). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the SZ filter may be formed as a function of the double-subset candidate shown in Table 7, sixth row, third column, namely, a seventh flat-subset candidate, can_(FLAT) _(—) _(DBL7).

When the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the SZ filter may be formed as a function of the double-subset candidate shown in Table 7, fourth row, third column, namely, a fourth 45-double-dataset candidate, can₄₅ _(—) _(DBL4). Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the SZ filter may be formed as a function of the double-subset candidate shown in Table 7, fifth row, third column, namely, a fourth 135-double-dataset candidate, can₁₃₅ _(—) _(DBL4).

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the expansion pixel 119 _(r,c), the CFA-image-processing software 140 may apply the SZ filter to obtain the first, second and third color channels for such expansion pixel 119 _(r,c). For the single-dataset candidates, can_(H3) and can_(v3), the CFA-image-processing software 140 may obtain the zoom-data point z_(r,c) by applying the SZ filter in accordance with the equations (17) and (88)-(89), where: [v₁,v₂,v₃,v₄]=the single-dataset candidate from the Table 7.

For the can₄₅ _(—) _(DBL4), can₁₃₅ _(—) _(DBL4) and can_(FLAT) _(—) _(DBL7), the CFA-image-processing software 140 may obtain the zoom-data point z_(r,c) by applying the SZ filter in accordance with the equations (17) and (90)-(93) where: [v₁₁,v₁₂,v₁₃,v₁₄]=is the first of the double-dataset candidate from Table 7, and [v₂₁,v₂₂,v₂₃,v₂₄]=is the second of the double-dataset candidate from Table 7.

After obtaining the first, second and third color channel for the expansion pixel 119 _(r,c), the CFA-image-processing software 140 may populate (i) the zoom-data set 160 with the zoom-data point z_(r,c), and (ii) the orientation map 148 with the g_(r,c). This way, after performing the equations (93) and (88)-(93) for each pixel of the second expanded-pixel subset, as appropriate, the zoom-data set 160 defines the first, second and third color channels for the second expanded-pixel subset, and the orientation map 148 includes the edge indicators g_(1,1) . . . g_(p,q) for such second expanded-pixel subset.

After interpolating the second expanded-pixel set, the CFA-image-processing software 140 may interpolate the third expanded-pixel subset. The CFA-image-processing software 140 may interpolate any given expansion pixel 119 _(r,c) of the second expanded-pixel subset as follows.

The CFA-image-processing software 140 may obtain, from the edge indicators g_(1,1) . . . g_(p,q), the edge indicators g_(r−1,c), g_(r+1,c), g_(r,c−1), g_(r,c+1). Thereafter, the CFA-image-processing software 140 may then determine, from the edge indicators g_(r−1,c), g_(r+1,c), g_(r,c−1), g_(r,c+1), the edge indicator g_(r,c) for the expansion pixel 119 _(r,c). The CFA-image-processing software 140 may determine the edge indicator g_(r,c) by:

$\begin{matrix} {g_{r,c} = \left\{ \begin{matrix} {{{flat};{{if}\mspace{14mu}{at}\mspace{14mu}{least}\mspace{14mu}{two}\mspace{14mu}{{of}\;\left\lbrack {g_{{r - 1},c},g_{{r + 1},c},g_{r,{c - 1}},g_{r,{c + 1}}} \right\rbrack}\mspace{11mu}{are}\mspace{14mu}{flat}}}\mspace{65mu}} \\ {{h_{0};{{{if}\mspace{14mu} 0} < {{mean}\mspace{11mu}\left\lbrack {{{val}\left( g_{{r - 1},c} \right)},{{val}\left( g_{{r + 1},c} \right)},{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)}} \right\rbrack} < {23{^\circ}}}}\mspace{31mu}} \\ {{h_{45};{{{if}\mspace{14mu} 23} < {{mean}\left\lbrack {{{val}\left( g_{{r - 1},c} \right)},{{val}\left( g_{{r + 1},c} \right)},{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)}} \right\rbrack} < {67{^\circ}}}}\mspace{34mu}} \\ {{h_{v};{{{if}\mspace{14mu} 67} < {{mean}\left\lbrack {{{val}\left( g_{{r - 1},c} \right)},{{val}\left( g_{{r + 1},c} \right)},{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)}} \right\rbrack} < {112{^\circ}}}}\mspace{31mu}} \\ {h_{135};{{{if}\mspace{14mu} 112} < {{mean}\left\lbrack {{{val}\left( g_{{r - 1},c} \right)},{{val}\left( g_{{r + 1},c} \right)},{{val}\left( g_{r,{c - 1}} \right)},{{val}\left( g_{r,{c + 1}} \right)}} \right\rbrack} < {157{^\circ}}}} \end{matrix} \right.} & (95) \end{matrix}$

After determining the edge indicator g_(r,c), the CFA-image-processing software 140 may then select, as a function of the edge indicator g_(r,c), a third zoom filter (“TZ filter”) for estimating the first, second and third color channels at the expansion pixel 119 _(r,c). The TZ filter may be adapted to estimate the first, second and third color channels as a function of a third-zoom gradient formed from the expanded-pixel set.

The TZ filter, and in turn, the third-zoom gradient may be formed as a function of (i) a single-subset candidate of the expanded-pixel set or (ii) a double-subset candidate of the expanded-pixel set. Table 8, below, includes a list of possible orientations of the edge indicator g_(r,c); and for each of the possible orientations, (i) a possible single-subset candidate or (ii) a possible double-subset candidate for forming the TZ filter.

TABLE 8 Edge Single-Subset Double-Subset Indicator Candidates Candidates h₀ {Z_(r,c−1) Z_(r,c+1)} N/A h₉₀ {Z_(r−3,c) Z_(r−1,c) Z_(r+1,c) Z_(r+3,c)} N/A h₄₅ {Z_(r−2,c+1) Z_(r−1,c) Z_(r,c−1) Z_(r+1,c−2)} N/A h₁₃₅ {Z_(r−2,c−1) Z_(r−1,c) Z_(r,c+1) Z_(r+1,c+2)} N/A h_(f) N/A {Z_(r,c−2) Z_(r,c−1) Z_(r,c+1) (Z_(r−1,c+2+) Z_(r+1,c+2))/2} {Z_(r−3,c) Z_(r−1,c) Z_(r+1,c) Z_(r+3,c)}

In accord with the Table 8, when the edge indicator g_(r,c) is indicative of the horizontal orientation, h₀, the TZ filter may be formed as a function of the single-subset candidate shown in Table 8, second row, second column, namely, a fourth horizontal-single-dataset-candidate, can_(H4). When the edge indicator g_(r,c) is indicative of the vertical orientation, h₉₀, the TZ filter may be formed as a function of the single-subset candidate shown in Table 8, third row, second column, namely, a fourth vertical-single-dataset candidate, can_(V4). When the edge indicator g_(r,c) is indicative of the flat orientation, h_(f), the TZ filter may be formed as a function of the double-subset candidate shown in Table 8, sixth row, third column, namely, a eighth flat-subset candidate, can_(FLAT) _(—) _(DBL8).

When the edge indicator g_(r,c) is indicative of is indicative of the 45-deg orientation, h₄₅, the TZ filter may be formed as a function of the double-subset candidate shown in Table 8, fourth row, second column, namely, a fifth 45-dataset candidate, can₄₅ _(—) ₅. Analogously, when the edge indicator g_(r,c) is indicative of is indicative of the 135-deg orientation, h₁₃₅, the TZ filter may be formed as a function of the single-subset candidate shown in Table 8, fifth row, second column, namely, a fifth 135-dataset candidate, can₁₃₅ _(—) ₅.

After selecting the single-dataset candidate or the double-dataset candidate in accordance with the edge indicator g_(r,c) for the expansion pixel 119 _(r,c), the CFA-image-processing software 140 may apply the TZ filter to obtain the first, second and third color channels for the expansion pixel 119 _(r,c). For the can_(H4), the CFA-image-processing software 140 may obtain the zoom-data point z_(r,c) by applying the SZ filter as follows:

$\begin{matrix} {z_{r,c} = \frac{v_{1} + v_{2}}{2}} & (93) \end{matrix}$

where: [v₁,v₂]=the single-dataset candidate from the Table 8.

For the can_(v4), the CFA-image-processing software 140 may obtain the zoom-data point z_(r,c) by applying the SZ filter in accordance with equations the (17) and (88)-(89), where: [v₁,v₂,v₃,v₄]=the single-dataset candidate from the Table 8. For the can₄₅ _(—) ₅ and can₁₃₅ _(—) ₅, the CFA-image-processing software 140 may obtain the zoom-data point z_(r,c) by applying the TZ filter as follows: z _(r,c) =k ₁ v ₁ +k ₂ v ₂ +k ₃ v ₃  (97)

where: [v₁,v₂,v₃]=the single-dataset candidate from Table 8.

For the can_(FLAT) _(—) _(DBL8), the CFA-image-processing software 140 may obtain the zoom-data point z_(r,c) by applying the SZ filter in accordance with the equations (17) and (90)-(93) where: [v₁₁,v₁₂,v₁₃,v₁₄]=is the first of the double-dataset candidate from Table 8, and [v₂₁,v₂₂,v₂₃,v₂₄]=is the second of the double-dataset candidate from Table 8.

After obtaining the first, second and third color channels, the CFA-image-processing software 140 may populate the zoom-data set 160 with the zoom-data point z_(r,c). This way, after performing (i) the equations (95); (ii) the equations (96) and (97) or (iii) the equations (95), (17) and (90)-(93) for each pixel of the third expanded-pixel subset, as appropriate, the zoom-data set 160 defines the first, second and third color channels for the third expanded-pixel set subset, and the orientation map 148 includes the edge indicators g_(1,1) . . . g_(p,q) for such third expanded-pixel subset.

In addition, the zoom-data set 160 defines the first-color, second-color and third-color planes. That is, each of the zoom-data points z_(1,1) . . . z_(p,q) may include contributions from each of the first, second and third color channels. The zoom-data set 160, when rendered, is colored according to all three of the color planes.

After completing the process block 602, the flow 600 may transition to termination block 604. At the termination block 604, the flow 600 may end. Alternatively, the flow 600 may be repeated periodically, in continuous fashion, or upon being triggered as a result of a condition, such as an impetus for forming one or more demosaiced images.

CONCLUSION

Variations of the method, apparatus and system described above are possible without departing from the scope of the invention. In view of the wide variety of embodiments that can be applied, it should be understood that the illustrated embodiments are exemplary only, and should not be taken as limiting the scope of the following claims. For instance, the exemplary embodiments described herein, may be embodied as methods, apparatus, electronic devices, and/or computer program products. Accordingly, such embodiments may be embodied in hardware and/or in software (including firmware, resident software, micro-code, etc.), which may be generally referred to herein as a “circuit” or “module”.

Other exemplary embodiments may take forms of computer program products disposed on a computer-usable or computer-readable storage medium having computer-usable or computer-readable program code or instructions (collectively “code”) embodied in the medium for use by or in connection with an instruction execution system. As used herein, the computer-usable or computer-readable medium may be any medium that can contain, store, communicate, propagate, or transport the code for use by or in connection with the instruction execution system, apparatus, or device. This code may also be stored in a computer-usable or computer-readable memory that may direct a computer or other programmable data processing apparatus to function in a particular manner, such that the code stored thereon produce an article of manufacture including code that implements the function specified in the foregoing flowchart and/or block diagram block or blocks.

The computer-usable or computer-readable medium may be, for example but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, device, or propagation medium. More specific examples (a nonexhaustive list) of the computer-readable medium include the following: hard disks, optical storage devices, a transmission media such as those supporting the Internet or an intranet, magnetic storage devices, an electrical connection having one or more wires, a portable computer diskette, a random access memory (“RAM”), a read-only memory (“ROM”), an erasable programmable read-only memory (“EPROM or Flash memory”), an optical fiber, and a compact disc read-only memory (“CD-ROM”).

The code for carrying out operations of the present invention may be written in an object oriented programming language, such as Java®, Smalltalk or C++, and the like. However, the code for carrying out operations or functions may also be written in conventional procedural programming languages, such as the “C” programming language and/or any other lower level assembler languages. It will be further appreciated that the functionality of any or all of the program modules may also be implemented using discrete hardware components, one or more Application Specific Integrated Circuits (“ASICs”), or programmed Digital Signal Processors or microcontrollers.

Moreover, in the embodiments described above, processing platforms, computing systems, controllers, and other devices containing processors are noted. These devices may contain at least one Central Processing Unit (“CPU”) and memory. In accordance with the practices of persons skilled in the art of computer programming, reference to acts and symbolic representations of operations or instructions may be performed by the various CPUs and memories. Such acts and operations or instructions may be referred to as being “executed,” “computer executed” or “CPU executed.”

One of ordinary skill in the art will appreciate that the acts and symbolically represented operations or instructions include the manipulation of electrical signals by the CPU. An electrical system represents data bits that can cause a resulting transformation or reduction of the electrical signals and the maintenance of data bits at memory locations in a memory system to thereby reconfigure or otherwise alter the CPU's operation, as well as other processing of signals. The memory locations where data bits are maintained are physical locations that have particular electrical, magnetic, optical, or organic properties corresponding to or representative of the data bits. It should be understood that the exemplary embodiments are not limited to the above-mentioned platforms or CPUs and that other platforms and CPUs may support the described methods.

The data bits may also be maintained on a computer readable medium including magnetic disks, optical disks, and any other volatile (e.g., Random Access Memory (“RAM”)) or non-volatile (e.g., Read-Only Memory (“ROM”)) mass storage system readable by the CPU. The computer readable medium may include cooperating or interconnected computer readable medium, which exist exclusively on the processing system or are distributed among multiple interconnected processing systems that may be local or remote to the processing system. It should be understood that the exemplary embodiments are not limited to the above-mentioned memories and that other platforms and memories may support the described methods.

It will be apparent to one of ordinary skill in the art that aspects of the invention, as described above, may be implemented in many different forms of software, firmware, and hardware in the implementations illustrated in the figures. Any actual software code or specialized control hardware used to implement aspects consistent with the present invention is not limiting of the present invention. Thus, the operation and behavior of the aspects were described without reference to the specific software code or hardware logic. It should be understood that a person of ordinary skill in the art would be able to design software and control hardware to implement the aspects of the present invention based on the description herein.

The foregoing description of preferred embodiments of the present invention provides illustration and description, but is not intended to be exhaustive or to limit the invention to the precise form disclosed. Modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention.

No element, act, or instruction used in the description of the present application should be construed as critical or essential to the invention unless explicitly described as such. Also, as used herein, the article “a” is intended to include one or more items. Where only one item is intended, the term “one” or similar language is used. Further, the terms “any of” followed by a listing of a plurality of items and/or a plurality of categories of items, as used herein, are intended to include “any of,” “any combination of,” “any multiple of,” and/or “any combination of multiples of” the items and/or the categories of items, individually or in conjunction with other items and/or other categories of items.

Exemplary embodiments have been illustrated and described. Further, the claims should not be read as limited to the described order or elements unless stated to that effect. In addition, use of the term “means” in any claim is intended to invoke 35 U.S.C. §112, ¶6, and any claim without the word “means” is not so intended. 

1. A method for forming a demosaiced image from a color-filter-array image comprising a first set of pixels colored according to a first color channel, a second set of pixels colored according to a second color channel and a third set of pixels colored according to a third color channel, the method comprising: obtaining an orientation map, the orientation map comprising, for each pixel of the color-filter-array image, an indicator of orientation of an edge bounding such pixel; interpolating the first color channel at the second and third sets of pixels as a function of the orientation map so as to form a fourth set of pixels; interpolating the second color channel at the first and third sets of pixels as a function of the orientation map and the fourth set of pixels; and interpolating the third color channel at the first and second sets of pixels as a function of the orientation map and the fourth set of pixels.
 2. The method of claim 1, wherein the indicator of orientation of an edge is indicative of an orientation of the edge at any of a horizontal, vertical, forty-five degree, one-hundred-thirty-five degree, and a flat orientation.
 3. The method of claim 1, wherein the fourth set of pixels comprises first and second subsets of pixels, wherein the first subset of pixels is colored according to the second color channel and an estimate of the first color channel, and wherein the second subset of pixels is colored according to the third color channel and an estimate of the first color channel.
 4. The method of claim 1, wherein interpolating the first color channel comprises: obtaining, from the orientation map, for at least one pixel of any of the second and third sets of pixels, an indicator of orientation of an edge bounding such at least one pixel; selecting, as a function of the indicator of orientation, a filter for estimating the first color channel at the at least one pixel; and applying, at the at least one pixel, the filter to estimate the first color channel at such at least one pixel.
 5. The method of claim 4, wherein the filter for estimating the first color channel is adapted to estimate the first color channel at the at least one pixel as a function of a gradient formed from at least one of the first set of pixels disposed in the edge bounding the at least one pixel.
 6. The method of claim 1, wherein interpolating the second color channel comprises: obtaining, from the orientation map, for at least one first pixel of the first set of pixels, a first indicator of orientation of an edge bounding such at least one first pixel; selecting, as a function of the first indicator of orientation, a first filter for estimating the second color channel at the at least one first pixel; applying, at the at least one first pixel, the first filter to estimate the second color channel at the at least one pixel; obtaining, from the orientation map, for at least one second pixel of the fourth set of pixels having the third color channel and an interpolated first color channel, a second indicator of orientation of an edge bounding such at least one second pixel; selecting, as a function of the second indicator of orientation, a second filter for estimating the second color channel at the at least one second pixel; and applying, at the at least one second pixel, the second filter to estimate the second color channel at the at least one second pixel.
 7. The method of claim 6, wherein the first filter is adapted to estimate the second color channel at the at least one first pixel as a function of a first gradient formed from at least one of the fourth set of pixels disposed in the edge bounding the at least one first pixel, and wherein the second filter is adapted to estimate the second color channel at the at least one second pixel as a function of a second gradient formed from at least one of the fourth set of pixels disposed in the edge bounding the at least one second pixel.
 8. The method of claim 7, wherein the fourth set of pixels comprises a subset of pixels colored according to the second color channel and an estimate of the first color channel, and wherein the first and second gradients are formed from at least one of the subset.
 9. The method of claim 1, wherein interpolating the third color channel comprises: obtaining, from the orientation map, for at least one first pixel of the first set of pixels, a first indicator of orientation of an edge bounding such at least one first pixel; selecting, as a function of the first indicator of orientation, a first filter for estimating the third color channel at the at least one first pixel; applying, at the at least one first pixel, the first filter to estimate the third color channel at the at least one pixel; obtaining, from the orientation map, for at least one second pixel of the fourth set of pixels having the second color channel and an interpolated first color channel, a second indicator of orientation of an edge bounding such at least one second pixel; selecting, as a function of the second indicator of orientation, a second filter for estimating the third color channel at the at least one second pixel; and applying, at the at least one second pixel, the second filter to estimate the third color channel at the at least one second pixel.
 10. The method of claim 9, wherein the first filter is adapted to estimate the third color channel at the at least one first pixel as a function of a first gradient formed from at least one of the fourth set of pixels disposed in the edge bounding the at least one first pixel, and wherein the second filter is adapted to estimate the third color channel at the at least one second pixel as a function of a second gradient formed from at least one of the fourth set of pixels disposed in the edge bounding the at least one second pixel.
 11. The method of claim 10, wherein the fourth set of pixels comprises a subset of pixels colored according to the third color channel and an estimate of the first color channel, and wherein the first and second gradients are formed from at least one of the subset.
 12. The method of claim 1, further comprising: performing at least one color correction of at least one of the first, second and third color channels after interpolating the first, second and third color channels.
 13. The method of claim 1, further comprising: performing a digital zoom after interpolating the first, second and third color channels.
 14. A method for forming a demosaiced image from a color-filter-array image comprising a first set of pixels colored according to a first color channel, a second set of pixels colored according to a second color channel and a third set of pixels colored according to a third color channel, the method comprising: obtaining an orientation map, the orientation map comprising, for each pixel of the color-filter-array image, an indicator of orientation of an edge bounding such pixel; interpolating the first color channel at the second and third sets of pixels as a function of the orientation map so as to form a fourth set of pixels; interpolating the second color channel at the first set of pixels as a function of the orientation map and the fourth set of pixels so as to form a fifth set of pixels; interpolating the third color channel at the first set of pixels as a function of the orientation map and the fourth set of pixels so as to form a sixth set of pixels; interpolating the second color channel at the sixth set of pixels as a function of the orientation map and the fifth set of pixels; and interpolating the second color channel at the fifth set of pixels as a function of the orientation map and the sixth set of pixels.
 15. The method of claim 14, wherein the indicator of orientation of an edge is indicative of an orientation of the edge at any of a horizontal, vertical, forty-five degree, one-hundred-thirty-five degree, and a flat orientation.
 16. The method of claim 14, wherein the fourth set of pixels comprises first and second subsets of pixels, wherein the first subset of pixels is colored according to the second color channel and an estimate of the first color channel, and wherein the second subset of pixels is colored according to the third color channel and an estimate of the first color channel.
 17. The method of claim 14, wherein interpolating the first color channel comprises: obtaining, from the orientation map, for at least one pixel of any of the second and third sets of pixels, an indicator of orientation of an edge bounding such at least one pixel; selecting, as a function of the indicator of orientation, a filter for estimating the first color channel at the at least one pixel; and applying, at the at least one pixel, the filter to estimate the first color channel at such at least one pixel.
 18. The method of claim 14, wherein interpolating the second color channel at the first set of pixels comprises: obtaining, from the orientation map, for at least one pixel of the first set of pixels, an indicator of orientation of an edge bounding such at least one pixel; selecting, as a function of the indicator of orientation, a filter for estimating the second color channel at the at least one pixel; and applying, at the at least one pixel, the filter to estimate the second color channel at the at least one pixel.
 19. The method of claim 14, wherein interpolating the third color channel at the first set of pixels comprises: obtaining, from the orientation map, for at least one pixel of the first set of pixels, an indicator of orientation of an edge bounding such at least one pixel; selecting, as a function of the indicator of orientation, a filter for estimating the third color channel at the at least one pixel; and applying, at the at least one pixel, the filter to estimate the third color channel at the at least one pixel.
 20. The method of claim 14, wherein interpolating the second color channel at the sixth set of pixels comprises: obtaining, from the orientation map, for at least one pixel of the sixth set of pixels, an indicator of orientation of an edge bounding such at least one pixel; selecting, as a function of the indicator of orientation, a filter for estimating the second color channel at the at least one pixel; and applying, at the at least one pixel, the filter to estimate the second color channel at the at least one pixel.
 21. The method of claim 14, wherein interpolating the third color channel at the fifth set of pixels comprises: obtaining, from the orientation map, for at least one pixel of the fifth set of pixels, an indicator of orientation of an edge bounding such at least one pixel; selecting, as a function of the indicator of orientation, a filter for estimating the third color channel at the at least one pixel; and applying, at the at least one pixel, the filter to estimate the third color channel at the at least one pixel.
 22. The method of claim 14, wherein the indicator of orientation of an edge is indicative of an orientation of the edge at any of a horizontal, vertical, forty-five degree, one-hundred-thirty-five degree, and a flat orientation.
 23. The method of claim 14, further comprising: performing at least one color correction of at least one of the first, second and third color channels after interpolating the first, second and third color channels.
 24. The method of claim 14, further comprising: performing a digital zoom after interpolating the first, second and third color channels.
 25. An apparatus for forming a demosaiced image from a color-filter-array image comprising a first set of pixels colored according to a first color channel, a second set of pixels colored according to a second color channel and a third set of pixels colored according to a third color channel, the apparatus comprising: memory adapted to store executable instructions to: obtain an orientation map, the orientation map comprising, for each pixel of the color-filter-array image, an indicator of orientation of an edge bounding such pixel; interpolate the first color channel at the second and third sets of pixels as a function of the orientation map so as to form a fourth set of pixels; interpolate the second color channel at the first and sets of pixels as a function of the orientation map and the fourth set of pixels; and interpolate the third color channel at the first and second sets of pixels as a function of the orientation map and the fourth set of pixels; and logic adapted to obtain from memory and execute the executable instructions.
 26. The apparatus of claim 25, wherein the indicator of orientation of an edge is indicative of an orientation of the edge at any of a horizontal, vertical, forty-five degree, one-hundred-thirty-five degree, and a flat orientation.
 27. The apparatus of claim 25, wherein the fourth set of pixels comprises first and second subsets of pixels, wherein the first subset of pixels is colored according to the second color channel and an estimate of the first color channel, and wherein the second subset of pixels is colored according to the third color channel and an estimate of the first color channel.
 28. The apparatus of claim 25, wherein the executable instructions to interpolate the first color channel comprises executable instructions to: obtain, from the orientation map, for at least one pixel of any of the second and third sets of pixels, the indicator of orientation of an edge bounding such at least one pixel; select, as a function of the indicator of orientation, a filter for estimating the first color channel at the at least one pixel; and apply, at the at least one pixel, the filter to estimate the first color channel at such at least one pixel.
 29. The apparatus of claim 25, wherein the executable instructions to interpolate the second color channel comprises executable instructions to: obtain, from the orientation map, for at least one first pixel of the first set of pixels, a first indicator of orientation of an edge bounding such at least one first pixel; select, as a function of the first indicator of orientation, a first filter for estimating the second color channel at the at least one first pixel; apply, at the at least one first pixel, the first filter to estimate the second color channel at the at least one pixel; obtain, from the orientation map, for at least one second pixel of the fourth set of pixels having the third color channel and an interpolated first color channel, a second indicator of orientation of an edge bounding such at least one second pixel; select, as a function of the second indicator of orientation, a second filter for estimating the second color channel at the at least one second pixel; and apply, at the at least one second pixel, the second filter to estimate the second color channel at the at least one second pixel.
 30. The apparatus of claim 25, wherein the executable instructions to interpolate the third color channel comprises executable instructions to: obtain, from the orientation map, for at least one first pixel of the first set of pixels, a first indicator of orientation of an edge bounding such at least one first pixel; select, as a function of the first indicator of orientation, a first filter for estimating the third color channel at the at least one first pixel; apply, at the at least one first pixel, the first filter to estimate the third color channel at the at least one pixel; obtain, from the orientation map, for at least one second pixel of the fourth set of pixels having the second color channel and an interpolated first color channel, a second indicator of orientation of an edge bounding such at least one second pixel; select, as a function of the second indicator of orientation, a second filter for estimating the third color channel at the at least one second pixel; and apply, at the at least one second pixel, the second filter to estimate the third color channel at the at least one second pixel.
 31. The apparatus of claim 25, further comprising executable instructions to: perform at least one color correction of at least one of the first, second and third color channels after interpolating the first, second and third color channels.
 32. The apparatus of claim 25, further comprising executable instructions to: perform a digital zoom after interpolating the first, second and third color channels. 